版权声明:本文为博主原创文章,未经博主允许不得转载。
Halcon基于卡尺的圆查找功能主要会用到:create_metrology_model、add_metrology_object_circle_measure、set_metrology_object_param、apply_metrology_model等算子,我们通过下面这个示例程序来简介具体使用方法。
dev_update_off()
dev_close_window()
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_draw('margin')
index := 0
*圆查找ROI
CircleInitRow:=[120,120,120,323,323,323,323]
CircleInitColumn:=[130,300,455,112,278,410,525]
CircleInitRadius:=[35,25,20,25,20,15,12]
*创建测量句柄
create_metrology_model (MetrologyHandle)
*将圆形或圆弧型的测量对象(ROI)添加到测量模型
add_metrology_object_circle_measure (MetrologyHandle, CircleInitRow, CircleInitColumn, \
CircleInitRadius, 10, 2,1, 30, 'num_measures', 30, Index)
repeat
read_image (Image, 'rings_and_nuts')
get_image_size (Image, Width, Height)
set_metrology_model_image_size (MetrologyHandle, Width, Height)
*设置测量模型中测量对象参数,像卡尺大小、边缘极性、边缘阈值等参数
set_metrology_object_param(MetrologyHandle, Index, 'measure_transition', 'negative')
*测量并拟合一个测量模型中所有测量对象的几何形状
apply_metrology_model (Image, MetrologyHandle)
*获取测量模型的测量结果
get_metrology_object_result (MetrologyHandle, Index, 'all', 'result_type', 'all_param', Circle)
*获取测量对象的结果轮廓,测量模型拟合出来的圆
get_metrology_object_result_contour (Contours, MetrologyHandle, Index, 'all', 1.5)
*获取测量模型中测量对象的测量区域和边缘点位置的坐标
get_metrology_object_measures (Contour, MetrologyHandle, 'all', 'all', Row1, Column1)
*渲染边缘点
gen_cross_contour_xld (Cross, Row1, Column1, 6, 0.785398)
Color := ['gray','cyan','green']
dev_display (Image)
dev_set_line_width (1)
dev_set_color (Color[0])
dev_display (Contour)
dev_set_color (Color[1])
dev_display (Cross)
dev_set_line_width (2)
dev_set_color (Color[2])
dev_display (Contours)
index := index + 1
disp_message(WindowHandle, '循环次数:' + index, 'window', 12, 12, 'green', 'false')
stop()
until (false)
*销毁测量句柄
clear_metrology_model (MetrologyHandle)
圆查找结果如下图所示:
如上图所示,halcon的圆查找功能可以一次查找多个圆,目前将卡尺、边缘点、拟合出来的圆都在图上显示出来了,显示结果放大效果如下图所示: