1加载图像
cs
复制代码
dev_update_off()
read_image(Image, '图片路径')
get_image_size(Image, Width, Height)
dev_get_window(WindowHandle)
dev_get_draw('margin')
dev_set_color('green')
dev_display(Image)
stop()
2绘制感兴趣区域
cs
复制代码
*左边的线
draw_line(WindowHandle, Row1, Column1, Row2, Column2)
gen_region_line(RegionLines, Row1, Column1, Row2, Column2)
dev_display(RegionLines)
*右边的线
draw_line(WindowHandle, Row11, Column11, Row21, Column21)
gen_region_line(RegionLines1, Row11, Column11, Row21, Column21)
dev_display(RegionLines1)
*绘制模板匹配区域
draw_rectangle2(WindowHandle, Row, Column, Phi, Length1, Length2)
gen_rectangle2(Rectangle, Row, Column, Phi, Length1, Length2)
reduce_domain(Image, Rectangle, ImageReduced)
3制作匹配模板
cs
复制代码
*制作模板
create_shape_model(ImageReduced, 'auto', rad(0), rad(360), 'auto', 'auto', 'use_polarity', 'auto', ModelID)
*找模板匹配结果
find_shape_model(Image, ModelID, rad(0), rad(360), 0.5, 1, 0.5, 'least_squares',0 , 0.9, Row3, Column3, Angle, Score)
4创建找线工具
cs
复制代码
*1创建测量句柄
create_metrology_model(MetrologyHandle)
*2设置图像大小
set_metrology_model_image_size(Metrology, Width, Height)
*3添加测量形状
add_metrology_object_generic(MetrologyHandle, 'line', [[Row1, Column1, Row2, Column2],[Row11, Column11, Row21, Column21]], 20, 5, 1, 5, [], [], Index)
*使用测量模型
apply_metrology_model(Image, MetrologyHandle)
*获取卡尺轮廓
get_metrology_object_measure(Contour, MetrologyHandle, 'all', 'all', Row4, Column4)
*获取一个实际测量的边
get_metrology_object_result_contour(Contour, MetrologyHandle, 'all', 'all', 1.5)
*绑定坐标系
*reference_system 参考系统
*[Row3,Column3,0]第一张模板匹配的坐标和角度
set_metrology_model_param(MetrologyHandle, 'reference_system', [Row3,Column3,0])
'reference_system':GenParamValue 中给出的元组应包含 [row, column, angle]。默认情况下,参考系统是图像坐标系,其原点在左上角。通过其平移(row, column)和旋转角度(angle)相对于图像坐标系定义新的参考系统。
*显示
dev_display(Image)
*匹配的图
dev_display_shape_matching_results(ModeID, 'green', Row3, Column3, Angle, 1, 1, 0)
*卡尺轮廓
dev_display(Contours)
*实际找到的边
dev_display(Contour)
5添加测量图
cs
复制代码
list_files ('D:/1w+/Halcon/05/dip_switch', 'files', Files)
for i := 0 to |Files| -1 by 1
read_image(Image, Files[i])
dev_image(Image1)
*查找新图的匹配结果
find_shape_model(Image1, ModelID, rad(0), rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row3, Column5, Angle1, Score1)
*对齐模板 其实是vp的Fixture工具---align_metrology_model 函数功能(用于对已创建的2D计量模型执行刚性对齐变换(先旋转、后平移))
align_metrology_model(MetrologyHandle, Row5, Column5, Angle1)
*使用测量模型
apply_metrology_model(Image1, MetrologyHandle)
*测量距离
*Parameter 第一条线的起点坐标与终点坐标
get_metrology_object_result(MetrologyHandle, 0, 'all', 'result_type', 'all_param', Parameter)
*制作左边线
gen_region_line (RegionLines1, Parameter[0], Parameter[1], Parameter[2], Parameter[3])
*Parameter1 第二条线的起点坐标与结束点坐标
get_metrology_object_result (MetrologyHandle, 1, 'all', 'result_type', 'all_param', Parameter1)
*制作右边线
gen_region_line (RegionLines2, Parameter1[0], Parameter1[1], Parameter1[2], Parameter1[3])
*测量两个局域之间的最小距离
distance_rr_min (RegionLines1, RegionLines2, MinDistance, Row12, Column12, Row22, Column22)
*画一个水平线
gen_region_line (RegionLines3, Parameter[0]+20, Parameter[1], Parameter1[0]+20, Parameter1[1])
*获取卡尺轮廓图
get_metrology_object_measures (Contours1, MetrologyHandle, 'all', 'all', Row6, Column6)
*实际找到边
get_metrology_object_result_contour (Contour1, MetrologyHandle, 'all', 'all', 1.5)
dev_display (Image1)
dev_display (Contours1)
dev_display (Contour1)
dev_disp_text ('物体的宽度为:'+MinDistance, 'image', (Parameter[0]+20+Parameter1[0]+20)/2, (Parameter[1]+Parameter1[1])/2-50, 'black', [], [])
stop ()
endfor



