C#应用视频教程3.4 Halcon+C#测试
有了前面的基础后,我们来测试一下如何把程序做的更通用,首先是把初始化的方法修改一下,在初始化的时候传递过去HTuple这个对象(改成了全局的变量,以便于不同的方法调用)

其次需要有相机打开/相机关闭,图像保存/图像加载的功能(方便我们快速做测试),前面的相机操作已经讲过了,这里图像的加载也只是套用了前面的加载一个静态图像的功能(把绝对地址改成了参数),保存图像调用了Halcon的WriteImage方法

这个方法可以参考范例write_image的这个范例学习(看他导出的C#的程序,稍微修改一下就行了)

此外为了防止程序退出的时候控件还在运行导致的报错,所以在窗体关闭的时候需要把类的线程杀掉,那些变量都扔掉

如何把模板匹配的内容放过来?我们把范例程序生成的C#代码定位到绘制特征矩形的部分,基本可以照抄这部分内容(绘制矩形,生成矩形)

当然绘制完成之后会输出矩形的很多参数,这些变量也要照抄生成的C#代码,这些长宽高,圆周率,面积,角度基本都是HTuple类型,这个类型可以简单理解为浮点数(有时候也表示-0255的byte,或者int等)

接下来就到了最重要的部分,其实就两个函数,一个是创建模板,一个是匹配模板(生成的C#代码中在for循环体内部还有一些函数,通过在Halcon执行可以发现他是让图片每次旋转一定的角度然后看作是新的图片,这个跟我们当前的项目没有关系,所以只需要掌握这两条函数即可)

Halcon的图像的处理是流程式的,比如A图像是原始图像,先做第一次处理得到B,再做第二次处理得到C,如此往下最后得到我们需要的图像部分。虽然我们不一定完全理解每一种图像处理算法的具体意义,但是只要能理解他的流程会拿过来用即可(这个项目中他最后得到了ho_ImageReduced对象,输出了模板匹配的hv_TempalteID对象)

如果你要加深Halcon每一行程序操作之后得到的变量的效果,还是回到Halcon的程序,你每一次F6单步之后可以定位到变量窗口,鼠标放到产生的每一个变量上看他的提示(region是一种变量,image又是一种变量)

可以测试下运行结果,先绘制一个矩形框,然后右击结束,确实可以得到X,Y,R,Error

那么如何执行动态的匹配呢(假如我们要让相机不停的拍照,也不停的识别特征并对外传出坐标),只要把这部分代码放到死循环里面就行了(还是要做全局的布尔值变量,只在确实模板得到了之后才执行,否则会报错,你的TempalteID都没有实例化),可以测试确实图像在动还是能始终得到数值

有一点常识要知道,默认水平是Y坐标,垂直是X坐标,左上角是[0,0]点。所谓的Error是0-255的数值(完全匹配就是0,完全不匹配就是255),此外输出的R是弧度(这些都可以自己测试发现,下图左边是我用手完全遮挡画面的效果,右图是我把相机旋转90度的效果,因为拍的是显示器,显示器不太好动)

最后我们再来看一个读写特征匹配模板的功能(你不可能每一次都打开相机-保存图像-浏览图形-设置特征-得到特征匹配ID-自动模式),我们肯定希望匹配了一次之后就把这个所谓的匹配ID保存起来,下次可以直接载入自动运行。Halcon也确实有这样一个范例提供了write_template和read_template方法(保存的文件没有后缀,名字叫做testt,这个有点奇怪,其实就是一个文本文件,2-3M左右大小)

有了前面的经验之后,这里可以直接复制生成的C#代码,就一个WriteTempalte方法和ReadTempalte方法,很好理解(我之前写的读写文件方法都必须加类型,这里为了统一起来,也为他设置一个txt的类型)

读取模板的时候注意,函数的参数要带ref,所谓的带ref就是函数输入的变量会被修改(详细用法大家可以做几个简单的函数做测试,不带ref是比较常用的,这里如果不带着类的实例的hv_TemplateID并不能得到修改,当然也可以用其他方法来实现)

总结:到此为止Halcon和C#的混合编程就介绍完毕了。在工业应用中涉及到算法的东西(比如图像处理,运动控制)很少会用到C#作为最终的执行程序,因为效率比较低。但是这并不妨碍我们用C#作为上层的交互程序,调用别人开发好的DLL,实际上如果用C++来做上层,这些应用层的验证,处理都会比C#麻烦的多。而在整个的图像处理算法中,特征匹配还是非常有用的,你可以把他当做字符识别来用(你抠一个字母A,然后找到图像中所有字母A),也可以作为人脸识别来用(当匹配率低于多少就认为不是同一个人,或者匹配一张脸去掉图像中的这张脸,发现可能的双胞胎之类的)。也可以当做瑕疵检测来用(你抠一个正常产品的样本图片,然后拿着这个样本比对不正常的东西,如果发现误差超过某个数值就认为产品有问题,否则合格)读者需要掌握:
1 常规的视觉系统的操作,基本的像素,二值化,曝光,特征,匹配率的概念
2 Halcon的基本用法,理解优秀软件的设计理念(尤其是这样一种平台级的产品)
3 Halcon+C#的混合编程方法,理解C#最擅长的处理方法,在以后可能的项目中也尝试这种混合编程的思路
更多教学视频和资料下载,欢迎关注以下信息:
我的优酷空间:
http://i.youku.com/acetaohai123

我的在线论坛:
http://csrobot.gz01.bdysite.com/

问题交流:
QQ:910358960
C#应用视频教程3.4 Halcon+C#测试的更多相关文章
- C#应用视频教程3.3 Halcon+C#测试
接下来我们考虑把Halcon的代码移植到C#程序上,首先找到halcon的dll(.NET类库有1.0,2.0,3.5的,如果你安装了更新版本的halcon则有更新的.NET类库,我们复制最新的dll ...
- C#应用视频教程3.2 Halcon软件测试
Halcon是图像处理比较牛逼的一个软件(德国人的东西,做的非常强大,里面集成的算法很多,可能你一辈子研究这个也做不过他),然而牛逼归牛逼,康耐视,基恩士也很牛逼,但是日本人的东西一般太过封闭,屌丝用 ...
- C#应用视频教程3.1 USB工业相机测试
图像处理是工控很有价值的一个领域,比如人脸识别,车牌识别,还有产品的位置识别,瑕疵检测,对于个人学习来说,我们无法直接上手几万块的成熟工业相机(高端的康耐视要6万左右,而且是黑白的,要测试一些带颜色的 ...
- Halcon算子解释
Halcon算子解释大全 Halcon/Visionpro视频教程和资料,请访问 重码网,网址: http://www.211code.com Chapter 1 :Classification 1. ...
- halcon算子
halcon的算子列表 Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样 ...
- halcon的算子列表
Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训 ...
- 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版
<zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...
- Halcon 常用算子使用场合
Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训 ...
- HALCON中的算子大全(中英对照)
HALCON中的算子大全(中英对照) Chapter 1 :Classification1.1 Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训 ...
随机推荐
- 20162303石亚鑫 第十二周hash补充博客
要求 利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75) 关键字集合:85,75,57,60,65,(你的8位学号相加 ...
- 【10.29校内测试】【线段树】【DP】【二进制Trie树求最小值最大】
Solution 标程太暴力惹QAQ 相当于是26棵线段树的说QAQ 不过我写了另一种写法,从大到小枚举每一个字母,标记字典序在这个字母之上的位置为1,每次都建一棵线段树,维护1的数量,即区间和. 修 ...
- mutiplemap 总结
之前只是在C++ Primer里面看过关联容器,可能因为没有实际用过,只是看看,所以导致用的时候并不熟悉: 在这之前,map和set的特性应该要了解,map是关联数组,也就是由键值对组成的,而set只 ...
- Remove-Invalid-Parentheses-题解
题意 Remove the minimum number of invalid parentheses in order to make the input string valid. Return ...
- BZOJ 2754 SCOI 2012 喵星球上的点名 后缀数组 树状数组
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2068 Solved: 907[Submit][St ...
- UVALive 4426 Blast the Enemy! 计算几何求重心
D - Blast the Enemy! Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Subm ...
- HDU 4709 Herding (枚举)
Herding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- Tasker to detect application running in background
We used to be told that tasker is only capable of detecting foreground application, if the app gets ...
- generator自动生成mybatis的xml配置
generator自动生成mybatis的xml配置.model.map等信息:1.下载mybatis-generator-core-1.3.2.jar包. 网址:http://code. ...
- XDM、GDM和KDM
XDM.GDM.KDM是三种X Window的显示管理器 (1)XDM(默认的X Window System Display Manager)(2)GDM(gnome提供的Display Manage ...