一、首先把整体思路列出来:
1、读取一张图像
2、创建一个测量句柄
3、添加测量模型。本次找边,所以要添加一个线“Line”的模型
4、设置相关测量参数。比如:卡尺垂直于边的长度,卡尺的宽度,卡尺的个数,保留的卡尺个数,边缘最低对比度等。
5、开始找边
6、将找到的边界结果显示,同时获得每个卡尺找到的点坐标。
二、代码:
1、先找一张图像:
2、在halcon里输入代码:
*读图
read_image (Image, 'C:/Users/HS/Desktop/20171206114857.bmp')
get_image_size (Image, Width, Height)
*在我们要检的边界上画线
draw_line (200000, Row1, Column1, Row2, Column2)
shapeParam:= [Row1,Column1,Row2,Column2]
*创建句柄
create_metrology_model (MetrologyHandle)
set_metrology_model_image_size (MetrologyHandle, Width, Height)
*添加线模型
add_metrology_object_generic (MetrologyHandle, 'line', shapeParam, 20, 5, 1, 30, [], [], Index)
*设置参数,这里根据自己需求设置,这一坨用的都是同一个算子
set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'negative')
set_metrology_object_param (MetrologyHandle, 'all', 'num_measures',50)
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 40)
set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 1)
set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 80)
set_metrology_object_param (MetrologyHandle, 'all', 'measure_length2', 1)
set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold',50)
set_metrology_object_param (MetrologyHandle, 'all', 'measure_interpolation', 'bicubic')
set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'all')
set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.7)
*开始找边缘,顺便把边缘上卡尺找到的所有点坐标输出在ROW,Column里面(数组形式)
apply_metrology_model (Image, MetrologyHandle)
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
*把点显示出来
gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)
*得到线的起点和终点坐标并显示出来
get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)
get_metrology_object_result_contour (Contour, MetrologyHandle, 'all', 'all', 1.5)
/释放测量句柄
clear_metrology_model (MetrologyHandle)
三、操作过程:
1、读图
2、画线
3、找到边界
4、查看边界