第一次发文章,有点小激动,各位大佬可以点波关注后续会持续更新
运行效果如下:
还有扩展的空间,可以对输出参数进行排序等。
废话不多说,直接上干货。
我们知道模板匹配算子是用来匹配模板加坐标补正的,它是先创建模型,然后在实现匹配模型,其实可以说是两个算子。
这里我就不说怎么把Halcon转c#了,本篇文章主要讲述标题里面的内容,不过大家有相关的需求都可以评论下来,后续我会更新。
我们把Halcon转成c#后,相关的类文件会显示在保存的路径上,如下图双击进去:
进去后我们会看到一大堆代码,相信很多小伙伴第一次都会懵圈,其实我们只需要用到action内的代码即可(也不需要全部用到,里面也有一些用不到的)
首先第一步找到action,如下图:
这里先发部分源码
首先我们创建一个窗体来使用这个算法如下图:
图中左边白色区域是winform自带控件属性表,这里我们使用该控件来定义模板匹配的创建参数以及匹配参数 ,部分代码如下:
效果如下:
左边是参数描述,右边的值都是可以更改的,不同的参数类型有不同的属性变量
然后我们需要为Halcon控件显示我们需要用处理的图像,这里我们测试用本地图像,实际上是需要用到相机sdk来采集图像进行匹配的,部分代码如下:
有了图像后,我们还需要创建对应的ROI,这里我们选择带有旋转的矩形ROI比较方便,这里封装了对应的方法调用即可,部分代码如下:
有了ROI后,我们还需要实时获取ROI移动的位置,否则ROI会出现突然消失等异常现象,部分代码如下:
现在可以开始创建模板了
将我们需要的代码从类文件中复制过来后,通过绑定按钮实现模型的创建,并将模板显示在对应的模板图像中。
部分代码如下:
效果如下:
还可以扩展一些其它功能,如上图显示的开关ROI显示,模板轮廓和名字等等。
创建好模板后,我们就可以开始最重要的一步匹配模型了,这里要注意参数要适当,否则会出现匹配不到的现象,我们可以再设置参数时给它一个初始值并且在上文中讲述了参数控件是winform自带的属性表,我们可以设置对应参数的说明文档。
同样,匹配模型我们还是用按钮的点击事件来触发对应代码。
部分代码如下:
有一些细节方面补充一下:
1:在匹配时最好加上异常捕获机制,否则匹配失败程序直接挂了,影响体验
2:需要先判断是否有需要匹配的图像,否则图像都没有,肯定报错
3:匹配多个模型的话,我们只需要如上图所示循环即可,循环匹配循环输出对应的参数。
最后,我们利用循环再把结果输出在对应的控件上即可,注意每次运行要先清空表格类的数据
部分代码如下:
效果如下:图1
可以看到这里我们把匹配个数设置为0后匹配到了更多的模型,如果还要匹配更多,可以将分数或者贪婪度降低
效果2显示对应的输出参数