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功能:把一个训 ...
随机推荐
- 理解onPause和onStop
onPause 用于由一个Activity转到另一个Activity.设备进入休眠状态(屏幕锁住了).或者有dialog弹出时 onStop 用于不可见的Activity(有对话框弹出时,这时底下的a ...
- JDK源码学习笔记——Enum枚举使用及原理
一.为什么使用枚举 什么时候应该使用枚举呢?每当需要一组固定的常量的时候,如一周的天数.一年四季等.或者是在我们编译前就知道其包含的所有值的集合. 利用 public final static 完全可 ...
- CF980E The Number Games【树链剖分/线段树】
CF980E The Number Games 题意翻译 Panel 国将举办名为数字游戏的年度表演.每个省派出一名选手. 国家有 n 个编号从 1 到 n 的省,每个省刚好有一条路径将其与其他省相连 ...
- python开发_thread_线程_搜索本地文件
在之前的blog中,曾经写到过关于搜索本地文件的技术文章 如: java开发_快速搜索本地文件_小应用程序 python开发_搜索本地文件信息写入文件 下面说说python中关于线程来搜索本地文件 利 ...
- HDU 4720 Naive and Silly Muggles (简单计算几何)
Naive and Silly Muggles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- ZOJ 2112 Dynamic Rankings (动态第k大,树状数组套主席树)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- 1588: [HNOI2002]营业额统计 (splay tree)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 5783 Solved: 1859[Submit][Stat ...
- 3D数学读书笔记——3D中的方位与角位移
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/25339595 方位和角位移 ...
- x-superobject
x-superobject GITHUB: https://github.com/onryldz/x-superobject **Delphi Cross Platform Rapid JSON**- ...
- SQL:表格创建学习笔记
CREATE TABLE 语法 CREATE TABLE "table_name"("column 1" "data type for column ...