保姆级-C#与Halcon的窗体界面展示阈值分割图像教程(机器视觉保姆级教程)

       经历上一篇《零基础小白实现C#调用halcon dll的过程,并测试程序证明C#halcon联合开发成功》的发布已经过去三天啦,

零基础小白实现C#调用halcon dll的过程,并测试程序证明C#halcon联合开发成功-CSDN博客

       在友友的催更下,我将用我花2W以及四个月时间的所学,后面将全无保留的为大家更新C#与Halcon的学习之路,也是记录我的学习之路,记录后面大四上学期培训生活(望有CSDN机器视觉圈的有成之士,能做下我的伯乐)。

      我时常在想有没有必要去做这么一件事。我想的是学完再更新,但是看到网上资料较少,鱼龙混杂,课程也不规范,你们对于这些资料也无从下手,学着难,学着深奥,学不会、等等问题。

     我看到这些情况真的于心不忍,痛下心后面慢慢更新,我希望我的保姆教程(胎儿级教程)、热情和热血会点亮一些人,让你们在这段学习中有所帮助,更加清晰的了解到这个机器视觉的行业。所有文章将以保姆级或者胎儿级教程来更新。 你的点赞、关注与支持是我更新下去的最大动力。

正文:

   下面我将详细介绍关于保姆级-C#与Halcon的窗体界面展示阈值分割图像教程,将一步步指导你如何使用 C# 和 Halcon 库创建一个简单的 Windows 窗体应用程序,并在该界面中显示经过阈值分割处理的图像。当然,以下保姆级教程,相信每一个小白都能听懂,都能做出自己想要的阈值分割图像教程。

这个教程特别适合初学者,内容详细且易于理解。

先展示一下阈值分割结果展示图:

前期准备
  1. 安装 Visual Studio:确保你已经安装了 Visual Studio,并选择了适用于 C# 开发的组件。
  2. 安装 Halcon:下载并安装 Halcon。安装完成后,确保 Halcon 的库文件(如 HalconDotNet.dll)已正确配置到你的开发环境中。
  3. 安装网上教程很多,这里就不过多赘述,未配置Halcon 的库文件(如 HalconDotNet.dll)参考下面零基础小白实现C#调用halcon dll的过程的教程(也是胎儿级版本)

零基础小白实现C#调用halcon dll的过程,并测试程序证明C#halcon联合开发成功-CSDN博客

第一步:创建 C# Windows Forms 项目

  1. 启动 Visual Studio,创建一个新的“Windows Forms 应用程序”项目。

    2.命名项目,如 HalconThresholdDemo,(遵循C语言文件命名规范)并选择保存路径(尽量自己单独建一个文件夹,便于查看和后面理解)。

Form1 是类

Program.cs是程序入口,也是Main函数 ,界面就是这样

第二步:了解窗体界面

这个边框是工具箱和属性(如若没有:最上面的视图 ->工具箱即可)还没有则拉侧边 鼠标左键拉出来。工具箱(有窗体所需的工具,常用的有小黑窗体,按钮Button ,文字TextBox等)

第三步:设计窗体界面

1.在设计界面时,我们需要几个基本的控件:

  • 两个 HWindowControl 控件,用于显示原始图像和分割后的图像。(没有这个控件需要将下图的halcondotnet.dll拖到工具箱中,随在拖哪里都可以),会自动生成HWindowControl 和HSmartWindowControl,点击工具箱中的HWindowControl (箭头的里面),

      点击工具箱中的HWindowControl ,将HWindowControl 控件(这里叫他小黑窗体)拖到Form2窗体中(建立两个HWindowControl 控件(这里叫他小黑窗体),一个用于显示原始图像,一个用于显示阈值分割后的图像)。

    注意:两个窗体名字都要改;小黑窗体1的Name改为:hWindowControl_yuanshi

              小黑窗体2的Name改为:hWindowControl_threson

  • 一个按钮 (Button) 用于读取图像, 点击工具箱->点击Button->移动鼠标至拖到Form2窗体中,用于建立点击的按钮。设置框体按钮Name名字为:button_readImage   框中文字Text:读取图片

  • ①两个文本信息 (Label) 用于解释后面文本框的最大和最小灰度值。

      ②两个文本框 (TextBox) 用于输入最大和最小灰度值。最大灰度输入的Name命名为:                       textBox_Maxgunrun     最小灰度输入的Name命名为:textBox_Mingunrun

  • 另一个按钮 (Button) 用于执行阈值分割。按钮 (Button)的Name命名为:button_yuzhifenge     框中文字Text:阈值分割

2.注意:

就是你有可能会在上面的操作中,点到窗体的控件,进入代码了,不要慌,不要慌,莫紧张,下面来跟着操作,点击Form2.cs[设计] 即可重新返回白色窗体界面。

第四步:编写代码

当然你们有疑问?我们那如何进入代码呢?跟着来操作

我们点击这个框时,代码中会自动生成关于按钮点击事件,其他的也是一样的会生成事件。button_readImage_Click: 处理读取图像的按钮点击事件。

Form1.cs 中,添加以下代码:

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;
using HalconDotNet;namespace YJH1  //命名空间 包含这个程序所有代码
{public partial class Form1 : Form  //class Form1 类继承了From ,代表Windows窗体。{public Form1() //类的构造函数{InitializeComponent(); //初始化窗体组件(按钮 文本等)}private void label1_Click(object sender, EventArgs e){}private void hWindowControl_yuanshi_HMouseMove(object sender, HalconDotNet.HMouseEventArgs e){}/// <summary>/// 图片的成员变量   // 程序里有两个私有成员变量ho_image 和 MinGray、 MaxGray,分别用来保存读取图像数据和灰度阈值的范围/// </summary>private HObject ho_image;//处理读取图像的按钮点击事件private void button_readImage_Click(object sender, EventArgs e){//从指定路径读取图像、并将图像数据保存在ho_image中HOperatorSet.ReadImage(out ho_image, "D:\\VisualStudio\\yujiahong1\\图片\\邓紫棋.png");HTuple width, height;//获取图像的宽度和高度,并将他们保存在width和height 变量中。HOperatorSet.GetImageSize(ho_image, out width, out height);//设置显示图像的区域,这里设置成显示整个图像HOperatorSet.SetPart(hWindowControl_yuanshi.HalconWindow,0, 0, height - 1, width - 1);//显示(将图像显示在窗体上的控件(即定义的hWindowControl_yuanshi)中)HOperatorSet.DispObj(ho_image, hWindowControl_yuanshi.HalconWindow);}// 这里提一下,HTuple是通用的数据容器,不同类型的数据皆可存储(如int、double、string 等)HTuple MinGray;HTuple MaxGray;//处理阈值分割的按钮点击事件private void button_yuzhifenge_Click(object sender, EventArgs e){//if(ho_image == null)检查是否已经读取了图像,如果没有读取到图像,就自动调用读取图像的按钮事件if (ho_image == null){button_readImage_Click(null, null);}//设置颜色//HOperatorSet.SetColorMaxGray = int.Parse(textBox_Maxgunrn.Text);MinGray = int.Parse(textBox_Mingunrun.Text);HObject Region;//对图像进行阈值分割,HOperatorSet.Threshold(ho_image, out Region, MinGray, MaxGray);HTuple width, height;HOperatorSet.GetImageSize(ho_image, out width, out height);//窗体句柄,设置显示范围HOperatorSet.SetPart(hWindowControl_threson.HalconWindow, 0, 0, height - 1, width - 1);//分割下来的图像显示在hWindowControl_threson控件中HOperatorSet.DispObj(Region,hWindowControl_threson.HalconWindow) ;}private void textBox_Mingunrun_TextChanged(object sender, EventArgs e){}private void Form1_Load(object sender, EventArgs e){}}
}

   1.代码中注意的点就是:编写代码图片时,可能网上下载的图片不太支持,读取识别报错,这个是因为图片大小问题,选择你的图片,截屏发到微信或者QQ,保存到文件路径中即可,一般图片用.png,

    2。注意的是 灰度识别中的阈值分割,图片用灰度图更好。

第五步:运行程序

  1. 构建并运行项目。
  2. 点击“读取图像”按钮,选择图像文件。
  3. 在文本框中输入阈值范围的最小和最大灰度值(代码里面自动设置了范围的,若要更改请阈值范围,在点击读取图像前更改)。

  1. 点击“阈值分割”按钮,查看分割后的图像。

总结

     通过此次保姆级教程,你已经创建了一个基本的 C# Windows 窗体应用程序,它能够读取图像并在界面中展示原始图像和阈值分割后的图像。这是机器视觉应用中的一个重要基础,未来你可以基于此扩展更多功能,比如对象检测、边缘检测等。

上图是博主,C#与Halcon的梦幻联动成功的截图,需要源代码或文件的,可以主页找博主,分享给一路学习,一路奋进的你们。

我相信,你们的点赞、关注和评论是支持我前进的最大动力,我会在这里更新我的学习之路,希望我的学习路程会对你们有一定帮助。

    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405627.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人脸识别设计

总体思路 人脸识别使用的算法思路为&#xff1a;首先&#xff0c;定位一张图像中所有的人脸位置&#xff1b;其次&#xff0c;对于同一张脸&#xff0c;当光线改变或者朝向方位改变时&#xff0c;算法还能判断是同一张脸&#xff1b;然后找到每一张脸不同于其他脸的独特之处&a…

【秋招笔试】8.18大疆秋招(第一套)-后端岗

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

Linux安装redis和使用redisDesktop连接

目录 Linux安装redis及启动 第一步&#xff1a;下载redis压缩包 第二步&#xff1a;下载gcc-c 第三步&#xff1a;解压redis文件 第四步&#xff1a;进入redis-4.0.0.0目录执行make命令 第五步&#xff1a;安装redis到redis目录 第五步&#xff1a;复制redis.conf配置文件…

std::wcout,std::cout控制台输出中文乱码,std::cerr字符串的字符无效

系列文章目录 文章目录 系列文章目录前言一、中文乱码原因二、解决方法1.如果是windos11下&#xff0c;使用英文语言&#xff0c;需要加以下代码2.如果是中文语言只需要一行关键代码3.如果在异常处理中显示宽字符中文4.完整代码如下&#xff1a;实现文件测试代码输出打印 前言 …

Java异常捕获与处理:深入理解与实践

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

SAM 2——视频和图像实时实例分割的全新开源模型

引言 源码地址&#xff1a;https://github.com/facebookresearch/segment-anything-2 过去几年&#xff0c;人工智能领域在文本处理的基础人工智能方面取得了显著进步&#xff0c;这些进步改变了从客户服务到法律分析等各个行业。然而&#xff0c;在图像处理方面&#xff0c;我…

高考志愿智能推荐系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

数据采集监控平台内置SPC系统 提供统计控制功能

数据采集监控平台为了能多方位的为工作人员提供可视化界面&#xff0c;而不仅仅是采集显示这种单一功能&#xff0c;内置多种配置&#xff0c;而SPC系统就是提供统计控制功能的一个重要系统。 数据采集监控平台内置的统计过程控制&#xff08;Statistical Process Control, SPC…

Python3 运算符,数据类型,基本方法,学习

注意&#xff1a;部分代码直接复制菜鸟教程&#xff0c;在本地编辑器里运行 运算符 算术运算符 #!/usr/bin/python3a 21 b 10 c 0c a b print ("1 - c 的值为&#xff1a;", c)c a - b print ("2 - c 的值为&#xff1a;", c)c a * b print (&quo…

【电子数据取证】AES解密侵犯隐私案件数据

关键词&#xff1a;电子数据取证、手机取证、计算机取证 一、前言 在大数据时代&#xff0c;数据安全和隐私保护的重要性愈发显著。近期&#xff0c;我们遇到一起侵犯公民隐私的案件&#xff0c;其复杂性与敏感性要求我们采取更为精细和专业的技术手段。在还原涉案数据库至本地…

【JAVA入门】Day24 - 排序算法

【JAVA入门】Day24 - 排序算法 文章目录 【JAVA入门】Day24 - 排序算法一、冒泡排序二、选择排序三、插入排序四、快速排序4.1 递归4.2 快速排序 排序&#xff0c;是把混乱的数据排成从小到大或从大到小。 排序一共有十种左右&#xff0c;它们是&#xff1a;冒泡排序、…

Ciallo~(∠・ω・ )⌒☆第二十二篇 入门request请求库使用

请求库是用于发送HTTP请求的工具。常见的请求库有requests&#xff0c;它是一个功能强大且易于使用的HTTP库。 使用requests库发送GET请求&#xff1a; import requests url "https://httpbin.org/get"# 携带get请求参数 params {"pn": 10,"size&q…

Android大脑--systemserver进程

用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章&#xff0c;技术文章也可以有温度。 本文摘要 系统native进程的文章就先告一段落了&#xff0c;从这篇文章开始写Java层的文章&#xff0c;本文同样延续自述的方式来介绍systemserver进程&#xff0c;通过本文您将…

8个我平时每天都会看的网站,涵盖办公、娱乐、学习等

分享8个我平时每天都会看的网站&#xff0c;涵盖办公、娱乐、学习等多种类别&#xff0c;试过就知道有多好用&#xff01; 1、MyFreeMP3 tools.liumingye.cn/music/#/ 一个可以免费听歌的平台&#xff0c;不用充会员&#xff0c;里面收录了大多数的国内外知名流行歌手、乐队的…

电脑开机LOGO修改教程_BIOS启动图片替换方法

准备工具&#xff1a;刷BIOS神器和change logo&#xff0c;打包下载地址&#xff1a;https://download.csdn.net/download/baiseled/89374686 一.打开刷BIOS神器&#xff0c;点击备份BIOS&#xff0c;保存到桌面 二.打开change logo&#xff0c;1.点击load image&#xff0c;选…

Linux云计算 |【第二阶段】SECURITY-DAY1

主要内容&#xff1a; 监控基础&#xff08;系统监控命令、监控软件&#xff09;、Zabbix监控服务端部署、Zabbix监控客户端部署、创建监控主机、调用监控模板、自定义key、创建模板、应用集、监控项、绑定模板&#xff1b; 一、监控概述 1&#xff09;监控的目的 ① 实时报…

LED电子看板优化生产线的管理

在当今竞争激烈的制造业领域&#xff0c;企业不断寻求提高生产效率、降低成本和提升产品质量的方法。而 LED 电子看板作为一种先进的管理工具&#xff0c;正逐渐成为优化生产线管理的关键利器。 一、LED电子看板能够清晰地展示生产进度信息 在繁忙的生产线上&#xff0c;工人和…

18105 银行的叫号顺序

### 详细分析 为了模拟银行的叫号过程&#xff0c;我们可以使用优先队列&#xff08;堆&#xff09;来管理客户的服务顺序。优先级越高的客户会先得到服务&#xff0c;同级别的客户按到达时间先后顺序得到服务。如果优先级和到达时间都相同&#xff0c;则按输入顺序服务。 ##…

表达式求值 - 整形提升和截断

文章目录 一、整形提升二、为什么要整形提升&#xff1f;三、截断四、示例1&#xff0c;23① c1 c2② c3 c1 c2 4 一、整形提升 C语言的整形算数运算总是至少以缺省整形类型的精度来进行的。 为了获得这个精度&#xff0c;表达式中的字符类型和短整型操作数在使用之前被转换…

深度学习基础之前馈神经网络

目录 基本结构和工作原理 神经元和权重 激活函数 深度前馈网络 应用场景 优缺点 深度前馈神经网络与卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;的具体区别和联系是什么&#xff1f; 具体区别 联系 如何有效解决前馈神经网络…