当前位置: 首页 > news >正文

C# halcon 工业产品尺寸测量

产品检测

这段代码是一个基于HalconDotNet的Windows窗体应用程序,主要用于图像处理和测量。以下是对代码的一些总结:
1. **图像显示与加载:**
   - 使用`HalconDotNet`库进行图像处理。
   - 通过`OpenFileDialog`实现图像文件的选择和加载。
   - 使用`HImage`对象存储和显示图像。
2. **图像处理方法:**
   - 实现了图像的灰度化、二值化、连接区域等处理。
   - 提供了一系列图像处理的参数,如二值化阈值、区域筛选参数等。
3. **测量功能:**
   - 实现了对图像中物体宽度、高度的测量。
   - 计算了内外圈直径,并显示在界面上。
   - 提供了上下高度、左右宽度等测量按钮。
4. **界面交互:**
   - 通过按钮触发不同的图像处理和测量操作。
   - 提供了清除窗口和退出程序的功能。
5. **界面设计:**
   - 使用Windows窗体(`Form`)设计应用程序界面。
   - 包含了图像显示窗口(`HalconWindow`)和多个按钮用于触发不同操作。
6. **代码结构:**
   - 使用了命名空间(`WindowsFormsApp1`)。
   - 包含了一个`Form`类,其中定义了图像处理的方法和界面上的各个控件事件处理方法。
7. **需要改进的地方:**
   - 部分注释是中文,但整体注释较少,可以进一步添加注释以提高代码可读性。
   - 代码中使用了一些硬编码的路径,可以考虑使用相对路径或配置文件来管理。
总体而言,这是一个用于图像处理和测量的简单Windows应用程序,可以根据具体需求进一步扩展和优化。

using HalconDotNet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}public static HImage hImage = new HImage();public HRegion hRegion = new HRegion();public void HImageShow(HImage hImage, string filePath){hImage.ReadImage(filePath);hImage.GetImageSize(out HTuple width, out HTuple height);HOperatorSet.CountChannels(hImage, out HTuple channels);HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, height + 1, width + 1);//hImage.DispImage(hWindowControl1.HalconWindow);  //灰度图像hImage.DispObj(hWindowControl1.HalconWindow);}//二值化参数HTuple MinValue = 4;HTuple MaxValue = 88;//ROI筛选1HTuple feature1 = "area";string operation = "and";HTuple min1 = 150.0;HTuple max1 = 99999.0;// 照片位深int dpi = 72;public HRegion hImage1Process(HImage hImage){HImage grayImage = hImage.Rgb1ToGray();HRegion Region1 = grayImage.Threshold(MinValue, MaxValue);HRegion connectionRegion = Region1.Connection();HRegion selectRegion = connectionRegion.SelectShape(feature1, operation, min1, max1);HRegion regionUnion = selectRegion.Union1();HRegion closingRegion = regionUnion.ClosingCircle(7.5);HRegion opeingRegion = closingRegion.OpeningCircle(3.5);return opeingRegion;}//显示图片private void button1_Click(object sender, EventArgs e){OpenFileDialog openFileDialog2 = new OpenFileDialog();openFileDialog2.Multiselect = true;  //该值确定是否可以选择多个文件//openFileDialog2.Title = "请选择文件";openFileDialog2.Filter = "(*.PNG)|*.PNG|(*.jpg)|*.jpg|(*.txt)|*.txt";//openFileDialog2.Filter = "文档(*.doc;*.docx)|*.doc;*.docx";string filePath = "";if (openFileDialog2.ShowDialog() == DialogResult.OK){if (openFileDialog2.FileName != ""){filePath = openFileDialog2.FileName;HImageShow(hImage, filePath);}}}//清除窗口private void button2_Click(object sender, EventArgs e){hWindowControl1.HalconWindow.ClearWindow();hImage.Dispose();}//退出程序private void button9_Click(object sender, EventArgs e){System.Environment.Exit(0);}//宽度计算public void objWidth(HImage hImage){hRegion = hImage1Process(hImage);hRegion.SmallestRectangle2(out HTuple row, out HTuple column, out HTuple Phi, out HTuple Length1, out HTuple Length2);hRegion.SmallestCircle(out HTuple Row, out HTuple Column, out HTuple Radius);HTuple MaxLength1 = Length1.TupleMax();textBox2.Text = (MaxLength1 / dpi * 25.4).ToString() + "mm\n";hWindowControl1.HalconWindow.SetDraw("margin");hRegion.GenRegionLine(row, column - Length1, row, column + Length1);hRegion.DispObj(hWindowControl1.HalconWindow);hRegion.Dispose();}//高度计算public void objHeigth(HImage hImage){hRegion = hImage1Process(hImage);hRegion.SmallestRectangle2(out HTuple row, out HTuple column, out HTuple Phi, out HTuple Length1, out HTuple Length2);hRegion.SmallestCircle(out HTuple Row, out HTuple Column, out HTuple Radius);double MaxLength2 = 0;HTuple MaxLength1 = Length1.TupleMax();textBox1.Text = (Length1[0] == MaxLength1[0]).ToString();for (int Index = 0; Index < Length1.Length; Index++){if (Length1[Index] - MaxLength1[Index] <= 0.000001){MaxLength2 = Length2[Index];}}textBox1.Text = (MaxLength2 / dpi * 25.4).ToString() + "mm\n";hWindowControl1.HalconWindow.SetDraw("margin");hRegion.GenRectangle2(row, column, Phi, Length1, Length2);hRegion.GenRegionLine(row - Length2, column, row + Length2, column);hRegion.DispObj(hWindowControl1.HalconWindow);hRegion.Dispose();}//上下高度private void button3_Click(object sender, EventArgs e){objHeigth(hImage);}//左右宽度private void button4_Click(object sender, EventArgs e){objWidth(hImage);}//内圈直径private void button5_Click(object sender, EventArgs e){objCicle1(hImage);}//内圈直径计算public void objCicle1(HImage hImage){hRegion = hImage1Process(hImage);hRegion.SmallestRectangle2(out HTuple row, out HTuple column, out HTuple Phi, out HTuple Length1, out HTuple Length2);hRegion.SmallestCircle(out HTuple Row, out HTuple Column, out HTuple Radius);hRegion.GenRectangle2(row, column, Phi, Length1, Length2);HImage grayImage = hImage.Rgb1ToGray();HImage ImageReduced = grayImage.ReduceDomain(hRegion);HRegion Regions = ImageReduced.Threshold(94.0, 119.0);HRegion Fillup = Regions.OpeningCircle(5.5).Connection().SelectShape("area", "and", 30000.0, 999999).FillUp();hWindowControl1.HalconWindow.SetDraw("margin");Fillup.SmallestCircle(out double row2, out double column2, out double radius2);hRegion.GenCircle(row2, column2, radius2);hRegion.DispObj(hWindowControl1.HalconWindow);textBox3.Text = (radius2 / dpi * 25.4).ToString() + "mm\n";}//外圈直径计算public void objCicle2(HImage hImage){hRegion = hImage1Process(hImage);hRegion.SmallestRectangle2(out HTuple row, out HTuple column, out HTuple Phi, out HTuple Length1, out HTuple Length2);hRegion.SmallestCircle(out HTuple Row, out HTuple Column, out HTuple Radius);hRegion.GenRectangle2(row, column, Phi, Length1, Length2);HImage grayImage = hImage.Rgb1ToGray();HImage ImageReduced = grayImage.ReduceDomain(hRegion);HRegion Regions = ImageReduced.Threshold(94.0, 119.0);HRegion Fillup = Regions.OpeningCircle(5.5).Connection().SelectShape("area", "and", 30000.0, 999999).FillUp();hWindowControl1.HalconWindow.SetDraw("margin");Fillup.SmallestCircle(out double row2, out double column2, out double radius2);double radius3 = Length2;hRegion.GenCircle(row2, column2, radius3);hRegion.DispObj(hWindowControl1.HalconWindow);textBox4.Text = (radius3 / dpi * 25.4).ToString() + "mm\n";}private void button6_Click(object sender, EventArgs e){objCicle2(hImage);}private void button7_Click(object sender, EventArgs e){hRegion = hImage1Process(hImage);hRegion.SmallestRectangle2(out HTuple row, out HTuple column, out HTuple Phi, out HTuple Length1, out HTuple Length2);hRegion.SmallestCircle(out HTuple Row, out HTuple Column, out HTuple Radius);double MaxLength2 = 0;double MaxRow = 0;double MaxColumn = 0;double MaxPhi = 0;HTuple MaxLength1 = Length1.TupleMax();textBox1.Text = (Length1[0] == MaxLength1[0]).ToString();for (int Index = 0; Index < Length1.Length; Index++){if (Length1[Index] - MaxLength1[Index] <= 0.000001){MaxLength2 = Length2[Index];MaxRow = Row[Index];MaxColumn = Column[Index];MaxPhi = Phi[Index];}}textBox5.Text = (MaxLength2 / dpi * 25.4).ToString() + "mm\n";hWindowControl1.HalconWindow.SetDraw("margin");hRegion.GenRectangle2(new HTuple(MaxRow), new HTuple(MaxColumn), new HTuple(MaxPhi), new HTuple(MaxLength1), new HTuple(MaxLength2));hRegion.DispObj(hWindowControl1.HalconWindow);hRegion.Dispose();}private void button8_Click(object sender, EventArgs e){hImage.ReadImage("C:\\Users\\1\\Desktop\\表盘imgaes\\1-1.png");hImage.GetImageSize(out HTuple width, out HTuple height);HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, height + 1, width + 1);//hImage.DispImage(hWindowControl1.HalconWindow);  //灰度图像hImage.DispObj(hWindowControl1.HalconWindow);}private void button10_Click(object sender, EventArgs e){hImage.ReadImage("C:\\Users\\1\\Desktop\\表盘imgaes\\1-2.png");hImage.GetImageSize(out HTuple width, out HTuple height);HOperatorSet.SetPart(hWindowControl1.HalconWindow, 0, 0, height + 1, width + 1);//hImage.DispImage(hWindowControl1.HalconWindow);  //灰度图像hImage.DispObj(hWindowControl1.HalconWindow);}}
}

这段代码有一些优点和一些需要改进的地方。
**优点:**
1. **功能丰富:** 代码实现了图像处理和测量的多个功能,包括灰度化、二值化、区域连接、测量物体的宽度、高度等。
2. **界面交互:** 通过Windows窗体设计,提供了用户友好的界面,通过按钮触发不同的操作,易于使用。
3. **代码结构清晰:** 代码使用了命名空间和类的结构,提高了代码的组织性和可维护性。
4. **使用HalconDotNet库:** 利用HalconDotNet库进行图像处理,该库功能强大,适用于工业视觉和图像处理领域。
**需要改进的地方:**
1. **注释不足:** 部分注释是中文,但整体注释较少。可以添加更多注释,特别是对于复杂逻辑和算法的部分,以提高代码的可读性。
2. **硬编码路径:** 代码中使用了一些硬编码的路径,建议使用相对路径或配置文件来管理路径,提高代码的灵活性。
3. **异常处理:** 缺少对异常的处理,例如文件加载失败、图像处理失败等情况应该进行适当的异常处理。
4. **代码复用性:** 一些功能可能可以抽象成可复用的方法,提高代码的重用性。
5. **界面布局:** 界面布局方面可以进一步优化,使界面更加美观和易于使用。
总体而言,这段代码是一个功能完善的图像处理应用程序,通过一些改进可以进一步提高代码的质量和可维护性。

相关文章:

C# halcon 工业产品尺寸测量

产品检测 这段代码是一个基于HalconDotNet的Windows窗体应用程序&#xff0c;主要用于图像处理和测量。以下是对代码的一些总结&#xff1a; 1. **图像显示与加载&#xff1a;** - 使用HalconDotNet库进行图像处理。 - 通过OpenFileDialog实现图像文件的选择和加载。 …...

Vue中插槽的简单使用

插槽 分类&#xff1a;默认插槽、具名插槽、作用域插槽 默认插槽&#xff1a;让父组件可以向子组件指定位置插入html结构&#xff0c;也是一种组件通信的方式&#xff0c;适用于父组件&#xff08;App&#xff09;>子组件(MyFooter) 默认插槽的App组件 <template>&…...

华为OD机试真题-机器人仓库搬砖-2023年OD统一考试(C卷)

题目描述: 机器人搬砖,一共有N堆砖存放在N个不同的仓库中,第i堆砖中有bricks[i]块砖头,要求在8小时内搬完。机器人每小时能搬砖的数量取决于有多少能量格,机器人一个小时中只能在一个仓库中搬砖,机器人的能量格每小时补充一次且能量格只在这一个小时有效,为使得机器人损…...

三维模型数据的几何坐标变换的点云重建并行计算技术方法分析

三维模型数据的几何坐标变换的点云重建并行计算技术方法分析 倾斜摄影三维模型数据的几何坐标变换与点云重建并行计算技术的探讨主要涉及以下几个方面&#xff1a; 1、坐标系定义与转换&#xff1a;在进行坐标变换前&#xff0c;需要确定各个参考系的定义并实现坐标系之间的转…...

Android 横竖屏切换之窗体泄露leaked window DecorView XXXActivity

前言 遇到问题 Android 横竖屏切换之窗体泄露leaked window DecorView XXXActivity has leaked window DecorViewe6d2d3c[XXXActivity] that was originally added here 场景 在android 横竖屏切换时androidManifest 对应Activity可以设置 <activityandroid:name".XX…...

mysql之视图执行计划

一.视图 1.1视图简介 1.2 创建视图 1.3视图的修改 1.4视图的删除 1.5查看视图 二.连接查询案例 三.思维导图 一.视图 1.1视图简介 虚拟表&#xff0c;和普通表一样使用 MySQL中的视图&#xff08;View&#xff09;是一个虚拟表&#xff0c;其内容由查询定义。与实际表不…...

软件安装文档 | Docker (简洁)

如果之前安装过旧版本的Docker&#xff0c;可以使用下面命令卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine …...

PHP代码审计之实战审代码篇2

4. 仔细观察如下代码&#xff0c;思考代码有什么缺陷&#xff0c;可能由此引发什么样的问题&#xff1f; <?php require_once("/home/rconfig/classes/usersession.class.php"); require_once("/home/rconfig/classes/ADLog.class.php"); require_onc…...

05 Ciso模拟器连接腾讯云物联网开发平台

Ciso声明&#xff1a;本篇文章基于使用腾讯云物联网平台连接自定义esp8266物联网设备(腾讯连连控制开关实现) - CSDN App改编 一、总体概览 功能描述&#xff1a; 使用腾讯连连小程序进行控制&#xff0c; Alarm&#xff08;警铃&#xff09;&#xff1a;开的时候&#xff…...

Nginx(二十) 获取真实客户端IP

客户端在访问互联网应用服务器时&#xff0c;与真实的应用服务器之间会因为有多层反向代理&#xff0c;而导致真实应用服务器获取的仅是最近一层的反向代理服务器 IP。为使 Nginx 后端的上游服务器可以获得真实客户端 IP&#xff0c;Nginx 提供了 ngx_http_realip_module 模块用…...

【攻防世界】Reverse—— IgniteMe writeup

main函数&#xff1a;首先检查前4个字符是否“EIS{”&#xff0c;如果是&#xff0c;则会进入check函数。如果check返回true&#xff0c;则会显示“Congratulations” int __cdecl main(int argc, const char **argv, const char **envp) {int result; // eaxsize_t i; // [es…...

m1芯片电脑上的paragon15如何安装激活 m1芯片电脑上ntfs for mac如何安装

Paragon NTFS软件在M1芯片电脑上安装之后&#xff0c;最后一步会让我们“允许加载第三方内核扩展”&#xff0c;具体如下图所示。 图1&#xff1a;允许加载第三方内核扩展 按照图中提示“单击此处“&#xff0c;然后打开安全与隐私。接下来依次点击小锁标志进行解锁&#xff0c…...

【DevOps-01]】DevOps介绍

一、简要描述 DevOps:Development & Operations的缩写,也就是开发&运维 DevOps是一个不断提高效率并且持续不断工作的过程。 核心:简化Dev和Ops团队之间的流程,使整体软件开发过程更快速。 DevOps定义: DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和…...

基于PHP的花店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的花店管理系统 一 介绍 此花店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 …...

《PySpark大数据分析实战》-24.数据可视化图表介绍

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…...

kafka 偏移量的类型与提交方式

kafka checkpoint 在流处理中,“checkpoint” 通常指的是将应用程序的状态保存到可靠的存储系统中,以便在发生故障或应用程序需要重启时能够从先前的状态中恢复。这包括保存处理过的事件、中间结果以及任何其他状态信息。“Checkpointing” 可以确保系统的一致性,并提供容错…...

TCP服务器的编写(下)

我们现在开始对我们的客户端开始封装 我们的客户端&#xff0c;创建完套接字&#xff0c;需不需要bind呢&#xff1f;&#xff1f; 当然是不需要的&#xff0c;你本身是一个客户端&#xff0c;其他人写的应用也可能是客户端&#xff0c;如果我们bind&#xff0c;一定意味着我们…...

Linux系统安全及应用

目录 一、系统安全的加固 1、账号安全的基本措施 1.1 将用户设置为无法登录 1.2 锁定长期不使用的账号 1.3 删除无用的账号 1.4 锁定账号文件passwd、shadow 2、密码安全控制 2.1 设置密码有效期 2.1.1 适用于新建用户 2.1.2 适用于已有用户 2.2 强制用户下次登录一…...

初识Web服务器

一、web服务器 1、什么是web服务器&#xff1f; web服务器就是web项目的容器&#xff0c;我们将开发好的web项目部署到web容器中&#xff0c;才能使用网络中的用户通过浏览器进行访问。 一张图带你了解web服务器有啥作用&#xff1a; 在我的电脑上有一个已经做好的项目&#…...

IOS - 手机安装包 ipa 常见几种方式

安装 ipa 包的方法有很多中&#xff0c;可以通过不同的软件安装&#xff0c;本文只列出了常用的几种&#xff0c;做个简单的归纳整理 1、iTunes 安装 数据线连接手机之后&#xff0c;会自动连接iTunes&#xff0c;&#xff08;第一次连接的时候会提示是否信任此电脑&#xff0…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...