Halcon模板匹配+对齐模板+测量边(例子)

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

相关推荐
MyBFuture2 天前
Halcon模板匹配核心技术解析大全
开发语言·人工智能·计算机视觉·halcon·机器视觉
wuguan_5 天前
Halcon图像处理(灰度值)
图像处理·halcon
wuguan_5 天前
Halcon中值滤波,均值滤波,高斯滤波
算法·halcon
MyBFuture6 天前
Halcon 图像处理技巧:抠图与形态学操作指南
开发语言·halcon
wuguan_9 天前
Halcon图像处理
图像处理·人工智能·计算机视觉·halcon
我喜欢就喜欢10 天前
Word 模板匹配与样式同步技术详解
开发语言·c++·qt·word·模板匹配
格林威18 天前
Halcon vs OpenCV 保存图像速度对比测试
人工智能·深度学习·opencv·机器学习·计算机视觉·halcon·工业相机
格林威18 天前
Halcon vs OpenCV 速度对比(表格)
人工智能·数码相机·opencv·机器学习·计算机视觉·视觉检测·halcon
格林威18 天前
工业相机图像高速存储(C#版):先存内存,后批量转存方法,附堡盟 (Baumer) 相机实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·halcon