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

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

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

       在友友的催更下,我将用我花2W以及四个月时间的所学,后面将全无保留的为大家更新C#与Halcon的学习之路,也是记录我的学习之路,记录后面大四上学期培训生活(望有CSDN机器视觉圈的有成之士,能做下我的伯乐)。
      我时常在想有没有必要去做这么一件事。我想的是学完再更新,但是看到网上资料较少,鱼龙混杂,课程也不规范,你们对于这些资料也无从下手,学着难,学着深奥,学不会、等等问题。
     我看到这些情况真的于心不忍,痛下心后面慢慢更新,我希望我的保姆教程(胎儿级教程)、热情和热血会点亮一些人,让你们在这段学习中有所帮助,更加清晰的了解到这个机器视觉的行业。所有文章将以保姆级或者胎儿级教程来更新。 你的点赞、关注与支持是我更新下去的最大动力。
正文:
   下面我将详细介绍关于保姆级-C#与Halcon的窗体界面展示阈值分割图像教程,将一步步指导你如何使用 C# 和 Halcon 库创建一个简单的 Windows 窗体应用程序,并在该界面中显示经过阈值分割处理的图像。当然,以下保姆级教程,相信每一个小白都能听懂,都能做出自己想要的阈值分割图像教程。

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

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

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

第一步:创建 C# Windows Forms 项目
启动 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.SetColor
            MaxGray = 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.coloradmin.cn/o/2064757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树链剖分学习笔记

前言 树链剖分这个东西呢&#xff0c;简而言之就是把一些树上的操作转换成线性的问题。那看起来平平无奇的树链剖分&#xff0c;为什么很多人就是喜欢使用他呢&#xff0c;那想必肯定是有原因的&#xff0c;我们先卖个关子&#xff0c;先看一下树链剖分怎么写&#xff0c;原理…

DMA(hal库)

DMA&#xff08;直接存储器存取&#xff09; DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;是一种允许外设或内存之间直接传输数据的技术&#xff0c;而无需 CPU 参与。这能显著提高数据传输效率并减少 CPU 的负担。 使用 DMA 通常涉及以下步骤&…

图片转PDF怎么转?教你3种快捷方便的jpg转pdf方法

图片文件以及PDF文档已经是我们工作当中不可或缺的一部分&#xff0c;我们在一些商务合作的场景下经常需要把拍摄下来的合同、企划书、画册等图片内容转换为PDF格式后再发送&#xff0c;这样能够极大程度的保证文件的安全性&#xff0c;那么图片应该如何转换成PDF文件呢?今天来…

如何制作统信UOS启动盘?

如何制作统信UOS启动盘&#xff1f; 一、下载UOS系统安装镜像二、在UOS系统环境下制作启动盘步骤一&#xff1a;准备U盘步骤二&#xff1a;打开启动盘制作工具步骤三&#xff1a;选择ISO镜像文件步骤四&#xff1a;选择安装介质并格式化步骤五&#xff1a;等待制作完成 三、在W…

(LLM) 很笨

大型语言模型 (LLM) 并非你所想的那样。你被骗了。LLM 很笨&#xff0c;非常笨。事实上&#xff0c;它们更接近数据库&#xff0c;而不是人类。 这就是为什么人工智能仍然处于征服智能的第一步……如果有的话。 终极煤气灯效应 建立前沿人工智能的成本很高。前沿人工智能需要大…

Stable Diffusion 使用详解(8)--- layer diffsuion

背景 layer diffusion 重点在 layer&#xff0c;顾名思义&#xff0c;就是分图层的概念&#xff0c;用过ps 的朋友再熟悉不过了。没使用过的&#xff0c;也没关系&#xff0c;其实很简单&#xff0c;本质就是各图层自身的编辑不会影响其他图层&#xff0c;这好比OS中运行了很多…

10月天津人工智能主题——第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)

【ACM出版 | IEEE&ACM院士、CCF杰出会员担任组委| 往届会后3个半月检索 】 第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence and Intelligent Information Processing 中国…

无人机飞手培训:考证、组装、维修技术详解

随着无人机技术的飞速发展&#xff0c;无人机已广泛应用于航拍、农业、环境监测、救援等多个领域&#xff0c;成为现代社会不可或缺的工具之一。作为无人机操作的核心——无人机飞手&#xff0c;其专业技能的掌握至关重要。本文档将详细解析无人机飞手培训的关键环节&#xff0…

关于Python的20个奇技淫巧

Python有非常多有趣使用的技巧&#xff0c;下面列举20个短小精炼的用法&#xff0c;其中既包含常规语法&#xff0c;又有第三方库的妙用&#xff0c;体现了python简单即美的编程哲学。 快速实现字频统计 from collections import Counterwords 我明白你的意思&#xff0c;你…

python将字典数据保存为json文件

目录 一、json库介绍 二、字典生成json文件 1、导入 json 模块 2、将字典数据保存为 json 文件 (1) 创建一个python字典 (2) 指定要保存的 json 文件路径 (3) 将字典数据存为 json 文件 3、读取 json文件&#xff0c;并打印 一、json库介绍 方法作用json.dumps()将py…

[java][mybatis]generatorConfig.xml配置信息详细

generatorConfig.xml配置信息详细 mybatis-generator有三种用法&#xff1a;命令行、eclipse插件、maven插件。个人觉得maven插件最方便&#xff0c;可以在eclipse/intellij idea等ide上可以通用。 下面是从官网上的截图&#xff1a; 在MBG中&#xff0c;最主要也最重要的就是…

拒绝拖延!Kimi助你一天内速成论文初稿!

撰写学术论文是一项需要周密计划和精确执行的任务。它要求作者对文章的每个部分进行深入思考&#xff0c;以确保论文结构的合理性和论述的清晰度。利用Kimi的功能&#xff0c;我们可以更系统地进行写作&#xff0c;从构思到最终成稿&#xff0c;逐步构建出一篇高质量的学术论文…

短视频SDK解决方案,高效集成,助力商业变现

美摄科技&#xff0c;作为业界领先的多媒体技术服务商&#xff0c;其全面升级的短视频SDK解决方案&#xff0c;旨在为开发者与内容创作者提供一站式、高效能的创作工具&#xff0c;让每一个灵感都能瞬间转化为触动人心的视频作品。 【一站式解决方案&#xff0c;重塑短视频创作…

外包出来,面试5次全挂,心态蹦了......

大概介绍一下个人情况&#xff0c;男&#xff0c;毕业于普通二本院校非计算机专业&#xff0c;18年跨专业入行测试&#xff0c;第一份工作在湖南某软件公司&#xff0c;做了接近4年的外包测试工程师&#xff0c;今年年初&#xff0c;感觉自己不能够再这样下去了&#xff0c;长时…

Web漏洞介绍和Sql注入漏洞

常规渗透测试流程 漏洞探测包括&#xff1a;web漏洞测试&#xff0c;系统漏洞测试 工具探测、手工验证 优先找的漏洞&#xff1a;中间&#xff08;件&#xff09;漏洞、框架漏洞...webserver 知道创宇 Seebug 漏洞平台 - 洞悉漏洞&#xff0c;让你掌握前沿漏洞情报&#xff…

API容易被攻击,如何做好API安全

随着互联网技术的飞速发展和普及&#xff0c;网络安全问题日益严峻&#xff0c;API&#xff08;应用程序接口&#xff09;已成为网络攻击的常见载体之一。API作为不同系统之间数据传输的桥梁&#xff0c;其安全性直接影响到整个系统的稳定性和数据的安全性。 根据Imperva发布的…

docker-harbor私有仓库部署和管理

harbor&#xff1a;开源的企业级的docker仓库软件 仓库&#xff1a;私有仓库 公有仓库 &#xff08;公司内部一般都是私有仓库&#xff09; habor 是有图形化的&#xff0c;页面UI展示的一个工具&#xff0c;操作起来很直观。 harbor每个组件都是由容器构建的&#xff0c;所…

CocosCreator3.8 IOS 构建插屏无法去除的解决方案

CocosCreator3.8 IOS 构建插屏无法去除的解决方案 在实际项目开发过程中&#xff0c;我们通常无需CocosCreator 自带的插屏&#xff0c;一般采用自定义加载页面。 然后在构建IOS 项目时&#xff0c;启用&#xff08;禁用&#xff09;插屏无法操作&#xff0c;如下图所示&#…

PDF转图片神器!一键转换,告别繁琐操作

自从出了社会以来&#xff0c;不论是在职场应对工作还是日常的信息传输等等场景都是经常需要用到各类格式之间转换的情况&#xff0c;其中尤其是pdf和图片这类编辑条件要求偏高的工具对信息的保密程度更高&#xff0c;所以往往也是出现频率比较高的格式&#xff0c;今天针对pdf…

heic图片转换成jpg怎么快速转换?5个软件手把手教你转换图片片格式

heic图片转换成jpg怎么快速转换&#xff1f;5个软件教你轻松转换图片格式 将HEIC格式的图片转换为更常见的JPG格式可能是许多人在使用苹果设备后常遇到的需求。以下是五款能够帮助你快速完成HEIC转JPG的实用软件&#xff0c;无论是在线工具还是桌面应用&#xff0c;都可以让你…