C#视觉检测-模板匹配

news2024/11/23 6:30:20

前几天一个学员在学习C#与视觉交互时,也不知道视觉可以用来做什么 。下面我们就详细讲讲C# 和视觉交互的相关知识。

C#和Halcon的视觉交互在工业生产和智能制造领域中得到了广泛应用。其中,模板匹配是一种简单但有效的图像处理技术,可以用于检测和定位物体。本文将介绍C#和Halcon的视觉交互中的模板匹配技术。

一、C#与Halcon的连接

C#作为微软开发的一种面向对象的编程语言,具有良好的可扩展性和兼容性,可以轻松地与Halcon进行连接。要连接C#和Halcon,需要使用Halcon/.NET接口。此外,还需要下载安装Halcon运行时库并将其添加到C#项目中。

二、Halcon中的模板匹配

Halcon中的模板匹配是一种基于特征点或形状的图像处理技术。该技术通过比较输入图像与参考图像之间的像素值差异来检测并定位物体。其基本流程如下:

1. 选择参考图像

2. 提取特征或形状信息

3. 将信息存储为模板

4. 输入待匹配图像

5. 按照相同方式提取特征或形状信息

6. 在输入图像中搜索最佳匹配

三、C#实现模板匹配

在C#项目中实现模板匹配,需要使用Halcon/.NET接口。首先,需要创建一个Halcon的HObject对象来存储图像数据。然后,通过调用Halcon的模板匹配函数来实现匹配过程。具体步骤如下:

1. 加载参考图像和待匹配图像

2. 创建HALCON对象并将图像数据加载到对象中

3. 提取特征或形状信息并将其存储为模板

4. 在待匹配图像中搜索最佳匹配

5. 获取匹配结果并进行处理

下面是一个简单的C#代码示例,用于实现基于Halcon的模板匹配:

// 加载参考图像和待匹配图像

HObject referenceImage, matchImage;

HOperatorSet.ReadImage(out referenceImage, "reference.png");

HOperatorSet.ReadImage(out matchImage, "match.png");

// 创建HALCON对象并将图像数据加载到对象中

HObject referenceObject, matchObject;

HOperatorSet.GenEmptyObj(out referenceObject);

HOperatorSet.GenEmptyObj(out matchObject);

HOperatorSet.DispObj(referenceImage, WindowHandle);

HOperatorSet.DispObj(matchImage, WindowHandle);

// 提取特征或形状信息并将其存储为模板

HObject modelRegion;

HTuple modelID;

HOperatorSet.CreateShapeModel(referenceObject, "auto", new HTuple(-0.39), new HTuple(0.79), new HTuple("point_reduction_high"), new HTuple("ignore_local_polarity"), new HTuple(5), out modelID);

HOperatorSet.GetShapeModelContours(out modelRegion, modelID, 1);

// 搜索最佳匹配

HTuple row, column, angle, score;

HOperatorSet.FindShapeModel(matchObject, modelID, new HTuple(-0.39), new HTuple(0.79), 0.5, 1, 0.5, "least_squares", new HTuple(6), new HTuple(0.7), out row, out column, out angle, out score);

// 获取匹配结果并进行处理

if (score > 0.9)

{

// 匹配成功

HOperatorSet.DispObj(matchObject, WindowHandle);

HOperatorSet.SetColor(WindowHandle, "green");

HOperatorSet.SetLineWidth(WindowHandle, 2);

HOperatorSet.DispRectangle2(WindowHandle, row, column, angle, 50, 50);

}

else

{

// 匹配失败

MessageBox.Show("Match failed!");

}

在上述代码中,我们首先加载参考图像和待匹配图像,并创建HALCON对象来存储图像数据。然后,我们使用Halcon的CreateTemplate函数提取参考图像的特征或形状信息,并将其存储为模板。接下来,我们使用FindTemplate函数在待匹配图像中搜索最佳匹配,并获取匹配结果。最后,我们根据匹配结果进行处理,如果匹配成功,则在图像中绘制矩形框。

原始图片:

模板匹配后的图片:

四、总结

本文介绍了C#和Halcon的视觉交互中的模板匹配技术。模板匹配是一种简单但有效的图像处理技术,可以用于检测和定位物体。在C#项目中实现模板匹配,需要使用Halcon/.NET接口,并按照基本流程加载图像、提取特征或形状信息、将信息存储为模板、搜索最佳匹配并获取匹配结果。通过C#和Halcon的视觉交互,我们可以实现更加智能化和高效化的工业生产和智能制造。

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

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

相关文章

性能测试压测工具都有哪些?怎么选你知道吗?

目录 普遍存在的问题 工具选型和推荐 软件测试而非测试工具 总结: 普遍存在的问题 聊压测工具之前,先聊一下我面试候选人时问的问题以及在技术交流群经常遇到的一个情况。 面试候选人特别是性能测试岗位,我一般很少问测试工具的问题&…

53 最佳实践-安全最佳实践-虚拟机可信启动

文章目录 53 最佳实践-安全最佳实践-虚拟机可信启动53.1 概述53.2 配置vTPM设备,使能度量启动53.2.1 安装swtpm和libtpms软件53.2.2 虚拟机配置vTPM设备53.2.3 确认度量启动使能成功 53 最佳实践-安全最佳实践-虚拟机可信启动 53.1 概述 可信启动包含度量启动和远…

深入篇【Linux】学习必备:谈gcc/g++使用及原理 + 动静态库介绍 + debug与release模式

深入篇【Linux】学习必备:谈gcc/g是如何完成程序的翻译过程&&动静态库介绍&&debug与release模式 Ⅰ.gcc/g是如何完成程序的翻译过程的?①.预处理(宏替换)②.编译(生成汇编)③.汇编(生成机器可识别代码)④.链接(生成可执行文件) Ⅱ.动态库…

安装Nginx网站服务

目录 前言 一、Nginx简介 二、Nginx应用场景 三、Nginx与Apache优缺点 1)Nginx 相对于 Apache 的优点 2)Apache 相对于 Nginx 的优点 3)Nginx和Apache的差异 四、阻塞与非阻塞、同步与异步 五、安装Nginx软件 1、在线安装 ①使用y…

半导体测试系统 芯片自动化测试软件 可定制测试方案ATECLOUD-IC

*测试产品:芯片半导体器件。纳米软件ATECLOUD-IC芯片自动化测试系统适用于二极管、三极管、绝缘栅型场效应管、结型场效应管、单向和双向可控硅、普通和高速光耦、整流桥、共阴共阳二极管及多阵列器件等各类半导体分立器件综合性能自动化测试。 *被测项目&#xff…

vue3 script setup

解决在使用vue 3 composition API(组合式API)时繁琐的问题,比如定义一个方法,模板需要使用该方法,就必须将方法返回,当组件中存在大量方法和属性时就很麻烦。 一、什么是script setup 二、script setup什么作用 1.自动注册子组件 …

flutter 主题色彩管理组件 flex_color_scheme

flutter 主题色彩管理组件 flex_color_scheme 前言 原文 https://ducafecat.com/blog/flutter-flex-color-scheme 平时我们做样式适配关心几个方面: 设计稿颜色 标记尺寸大小、比例 全局修改为主 快速可修改 今天将会介绍一个快速调整主题色彩样式的三方组件 flex_color_schem…

[RocketMQ] NameServer启动流程源码解析 (一)

文章目录 1.NameServer概述2.NamesrvStartup启动入口3.createNamesrvController创建NamesrvController3.1 创建NamesrvController 4.start启动NamesrvController4.1 初始化NettyServer4.1.1 创建NettyRemotingServer4.1.2 registerProcessor注册默认请求处理器4.1.3 启动定时任…

Google C++ Style文档及常用代码规范(一):命名约定、格式、注释

文章目录 Google C Style文档及常用代码规范(一):命名约定、格式、注释命名约定通用命名规则文件命名类型命名变量命名常量命名函数命名命名空间命名枚举命名宏命名命名规则的特例 格式注释注释风格文件注释类注释函数注释变量注释类数据成员…

flutter getx nested navigation 嵌套路由

flutter getx nested navigation 嵌套路由 视频 https://youtu.be/SXER4JVBFps 前言 嵌套路由可以用在如购物确认向导界面切换。 使用 getx 实现嵌套路由,需要如下步骤: 通过 Navigator 组件的 key 属性 用 Get.nestedKey(1) 进行标记 onGenerateRoute…

delmia msd学习

在默认打开的结构树中添加一个产品tworobts TwoRobots是新建的一个空产品,并将其插入到resoourceslist下面通过 然后创建一个工位的工作区域 插入机器人 把机器人放在工作区域中,即其子物体 先选要移动的对象,然后选移动到什么地方 Keep positions的意思…

栈的概念和结构以及实现

1. 栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在 固定的一端 进行 插入和删除 元素操作。 进行数据插入和删除 操作的一端称为 栈顶 ,另一端称为 栈底 。栈中的数据元素遵守 后进先出 LIFO (Last in First Out) 的原则。 压栈:栈的插入操作叫做…

【带你刷《剑指Offer》系列】【每天40分钟,跟我一起用50天刷完 (剑指Offer)】第一天

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

python:使用Scikit-image对单波段遥感影像进行形状特征提取(morphology)

作者:CSDN @ _养乐多_ 本文将介绍使用Scikit-image对单波段遥感影像做形状特征提取的方法和代码。包括:腐蚀(erosion),膨胀(dilation),开运算(opening),闭运算(closing),形态学梯度(morphological gradient),白帽变换(top hat),黑帽变换(black hat),形…

一、枚举类型——用EnumSet来代替标识

Set 是一种不允许有重复元素存在的集合。enum 要求每个内部成员都是唯一的,因此看起来很像 Set,但是由于无法添加或移除元素,它并不如 Set 那么好用。于是 EnumSet 被引入,用来配合 enum 的使用,以替代传统的基于 int …

计算机启动

按下主机上的 power 键后,第一个运行的软件是 BIOS,BIOS 全称叫 Base Input & Output System,即基本输入输出系统。 (8086的1MB内存) 地址 0~0x9FFFF 处是 DRAM,顶部的 0xF0000~0xFFFFF&am…

第一章 基础算法(一)—— 快排,归并与二分

文章目录 快排归并排序二分整数二分浮点数二分 快速排序练习题785. 快速排序786. 第k个数 归并排序练习题787. 归并排序788. 逆序对的数量 二分练习题789. 数的范围790. 数的三次方根 有些累了,把这两天做的笔记整理发出 快排 快排的思路: 确定分界点根…

Pandas-DataFrame常用基础知识点总结

注:以下知识点总结是将数据转为DataFrame格式数据的基础之上进行操作的 (首先需要做的是将数据转为DataFrame格式) DataFrame格式示例: import pandas as pd data {"code": [000008, 000009, 000021, 000027, 00003…

代码随想录二刷 day28 | 回溯 之 93.复原IP地址 78.子集 90.子集II

day28 93.复原IP地址判断子串是否合法 78.子集回溯三部曲 90.子集II 93.复原IP地址 题目链接 解题思路: 切割问题就可以使用回溯搜索法把所有可能性搜出来 回溯三部曲 递归参数 startIndex一定是需要的,因为不能重复分割,记录下一层递归分…

一种数据源切换的实践方案

随着业务的不断深入,我们会碰见很多关于数据源切换的业务场景,数据源切换也是当前最常用的分库后的分流策略方式之一,对于读写职责分离的数据库集群而言,我们在服务层面制定相应的接口与数据库交互的定制化开发,也就是…