失败笔记本-HALCON篇-0010
项目场景:
今天还是什么?对了,还是HALCON,接触的越多,越发感觉HALCON的厉害之处了。今天跟着大佬入门HALCON的基础模板匹配,核心代码只有两句,非常厉害。
实现效果:用左侧的图案在右侧的图中检测出相同形状的元素。
参考链接:halcon入门教程18_形状模板匹配—
1.创建模板
步骤:
- 首先我们需要打开一张用来做模板的图片,创建模板
- 上来我就是一套丝滑小连招,把模板要用的图片区域提取了出来:
read_image (Image, 'mask.png')
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 0, 13)
reduce_domain (Image, Regions, ImageReduced)
- 然后直接利用create_shape_model算子创建模板:
create_shape_model (ImageReduced, 'auto', 0, rad(360), 'auto', 'auto', 'ignore_color_polarity', 'auto', 'auto', ModelID)
- 算子中需要设置角度:0 到 360度,需要注意转换为弧度单位。
- 算子中需要设置模式:忽略颜色对比度,‘ignore_color_polarity’。还可以设置忽略局部对比度等等参数。
- 最后的模板保存一个id在ModelID参数。
2.查找模板
步骤:
- 直接打开图片!
- 然后就是简单粗暴的find_shape_model算子:
find_shape_model (Image1, ModelID,0, rad(360), 0.5, 6, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
- 同样需要设置检测的角度范围,检测几个实例(第六个参数)。
- 结果会保存对象的行列坐标和置信度。
- 最后就是找办法输出了,在这里我选择画框:
dev_get_window (WindowHandle)
dev_set_draw ('margin')
hwidth := [150,150,150,150,150,150]
hheight := [100,100,100,100,150,150]
disp_rectangle2 (WindowHandle, Row, Column, Angle, hwidth, hheight)
- 这里需要注意使用dev_set_draw算子设置只画对象轮廓。
- disp_rectangle2算子中的参数需要类型一致,行列是元组,边长也得是元组。
总结:
在0010中,用到了以下算子:
create_shape_model()
find_shape_model()
dev_set_draw()
disp_rectangle2()