Halcon与C#联合开发——1.读取图片、图像二值化

在vs中引入halcon控件

在这里插入图片描述
修改目标平台为 x64
在这里插入图片描述

拖出三个控件

在这里插入图片描述

代码展示

using System;
using System.Windows.Forms;
//引用支持halcon的命名空间 
using HalconDotNet;namespace _1.HalconDisplay {public partial class Form1 : Form {// HObject 是Halcon库中表示图像和其他图形对象的类。在这里,声明了几个图像对象HObject ho_Image, ho_Regions, ho_ConnectedRegions, ho_SeletedRegions;// HTuple 则是Halcon库中用来存储元组(tuple)的类,它可以用来存储各种类型的数据。在这里,声明了几个用来存储图像宽度、高度和窗口句柄的变量。HTuple hy_Width = null, hy_Height = null, hy_WindowHandle = null;public Form1() {InitializeComponent();}// 运行按钮private void btnRun_Click(object sender, EventArgs e) {// HOperatorSet 是Halcon库中的一个操作符集合,包含了大量的图像处理函数和操作符。// GenEmptyObj 用于生成一个空的图像对象。HOperatorSet.GenEmptyObj(out ho_Image);HOperatorSet.GenEmptyObj(out ho_Regions);HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);HOperatorSet.GenEmptyObj(out ho_SeletedRegions);//检测窗口是否打开// HDevWindowStack 是用于管理Halcon显示窗口的堆栈// IsOpen():检查当前是否有Halcon显示窗口处于打开状态if (HDevWindowStack.IsOpen()) {// Pop() 从堆栈中弹出(移除)最顶部的窗口,并返回对应的窗口句柄。HOperatorSet.CloseWindow(HDevWindowStack.Pop());}// Dispose() 释放对象占用的资源ho_Image.Dispose();//ReadImage 读取图像HOperatorSet.ReadImage(out ho_Image, "printer_chip/printer_chip_01");// GetImageSize 获取图像大小HOperatorSet.GetImageSize(ho_Image, out hy_Width, out hy_Height);// SetWindowAttr() 设置Halcon显示窗口的属性HOperatorSet.SetWindowAttr("background_color", "blue");HOperatorSet.OpenWindow(0, 0, hWindowControl1.Width, hWindowControl1.Height, hWindowControl1.HalconWindow, "visible", "", out hy_WindowHandle);HDevWindowStack.Push(hy_WindowHandle);//显示图像if (HDevWindowStack.IsOpen()) {// DispObj 是Halcon库中用于在交互式开发环境中显示图像对象的函数。// HDevWindowStack.GetActive() 获取当前活动的Halcon显示窗口HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());}}// 图像二值化private void btn_Threshold_Click(object sender, EventArgs e) {ho_Regions.Dispose();//二值化HOperatorSet.Threshold(ho_Image, out ho_Regions, 128, 255);ho_ConnectedRegions.Dispose();//连通预处理HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions);//特征筛选ho_SeletedRegions.Dispose();HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SeletedRegions, "area", "and", 28084.7, 33809.1);if (HDevWindowStack.IsOpen()) {HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());}//显示筛选后的区域if (HDevWindowStack.IsOpen()) {HOperatorSet.SetColor(HDevWindowStack.GetActive(), "green");HOperatorSet.DispObj(ho_SeletedRegions, HDevWindowStack.GetActive());}ho_Image.Dispose();ho_Regions.Dispose();}}
}

结果

点击运行按钮可以加载出图片

在这里插入图片描述

点击二值化按钮可以将该图片进行二值化处理

在这里插入图片描述

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

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

相关文章

C语言中其他运算符介绍

除了算术运算符和位运算符外,C语言还提供了一些其他类型的运算符,包括逗号运算符、条件运算符、sizeof运算符、指针运算符等。这些运算符在C语言中具有特定的功能和用途,对于编写复杂的程序和实现各种算法非常有用。本文将深入介绍C语言中的这…

kali软件管理工具APT,修改APT下载的镜像,改为国内镜像

在tiaAPT(Advanced Package Tool)是用于在 Debian 及其衍生发行版中管理软件包的工具。APT 使用软件包源(repositories)来获取软件包及其依赖项,并将其安装到系统中。kali是Debian的发行版,同样使用APT管理…

matplotlib画图:子图中坐标轴与标题重合...

如下图 只要在代码最后加入 plt.tight_layout() 就可以自动调节

PCB设计中的高速信号是什么?

目录 高速信号的定义:​ 应对策略: 1.走线和分层: 2.使用特殊板材: 高速信号的定义: 应对策略: 1.走线和分层: 2.使用特殊板材:

接口自动化之 + Jenkins + Allure报告生成 + 企微消息通知推送

接口自动化之 Jenkins Allure报告生成 企微消息通知推送 在jenkins上部署好项目,构建成功后,希望可以把生成的报告,以及结果统计发送至企微。 效果图: 实现如下。 1、生成allure报告 a. 首先在Jenkins插件管理中&#x…

娃哈哈果汁饮品大广赛全方位解析:详细解读!

娃哈哈作为第16届大广赛最先发布的命题之一,旨在激发大学生的创新思维和实践能力,为广告行业培养优秀人才。广告形式涵盖了平面、影视、动画、互动等多个领域,吸引了来自全国各地高校的数千名学生参加。 大广赛已经成为了国内最具影响力的大…

edge浏览器彻底删除用户账号

效果图 操作教程 -- 这个教程里面比较重要的是3,5,8 -- 如果不执行第8步,还是没有任何效果。 -- 教程地址 https://blog.csdn.net/qq_37579133/article/details/128777770 继续删除windows凭据 结束 -----华丽的分割线,以下是凑字数,大家不…

深入了解 Postman 请求头的使用方法

当你在使用 Postman 发送请求时,请求头(Headers)是你可以包含在 HTTP 请求中的重要部分之一。请求头包含了关于请求的元数据信息,这些信息对于服务器来处理请求是非常重要的。下面是一份详细的图文介绍,说明了如何在 P…

How to convert .py to .ipynb in Ubuntu 22.04

How to convert .py to .ipynb in Ubuntu 22.04 jupyter nbconvertp2j 最近看到大家在用jupyter notebook,我也试了一下,感觉还不错,不过,也遇到了一些问题,比方说,我有堆的.py文件,如果要一个一…

ChatGPT助力论文写作:详细步骤解析

前言 在论文写作过程中,尽管人工智能工具如ChatGPT能为我们提供有效的辅助,但我们必须铭记,这些工具并不能完全取代我们的思考与判断能力。本指南将详尽地展示如何利用ChatGPT辅助论文写作的全过程,旨在帮助您更高效地完成学术任…

【面试经典 | 150】单词拆分

文章目录 Tag题目来源解题思路方法一:动态规划 写在最后 Tag 【动态规划】【字符串】 题目来源 139. 单词拆分 解题思路 方法一:动态规划 定义状态 定义 dp[i] 表示字符串 s 前 i 个字符组成的字符串(s[0, ..., i-1])是否能被…

kettle--资源库

1、数据库资源库(使用的会比较频繁) 作用:数据库资源库就是将转换和作业相关的信息保存到数据库中,当团队中需要使用到的时候都可以去使用该数据。 创建数据库资源库的一般流程: 建立数据的连接后查看数据库中对应的…