定义与查找形态模板,并显示创建与查找的结果(halcon代码演示)


形态模板的定义与查找是工业视觉里最基本的常用操作。下面勇哥提供一个例子。


下图是定义形态模板,并且显示模板轮廓。

image.png

换一张不同姿式的图片,查找模板,并显示模板轮廓、ROI、中心点。

image.png

dev_set_draw ('margin')
dev_set_color('green')
dev_close_window()
dev_open_window(0, 0, 512, 382, 'black', WindowHandle)

read_image (Image, 'C:/Users/Administrator/Desktop/新建文件夹/RobotAlign/RobotAlign/测试图片/11111111111111111111116.tif')

******创建模板

*手绘区域
draw_rectangle2(WindowHandle, Row, Column, Phi, Length1, Length2)
gen_rectangle2(Rectangle, Row, Column, Phi, Length1, Length2)

reduce_domain(Image, Rectangle, ImageReduced)
create_shape_model(ImageReduced, 'auto', -180, 360, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)

get_shape_model_contours(ModelContours, ModelID, 1)
area_center(Rectangle, Area, Row1, Column1)

hom_mat2d_identity(homMat2D)
hom_mat2d_translate(homMat2D, Row1,Column1, homMat2D)
affine_trans_contour_xld(ModelContours, ContoursAffinTrans, homMat2D)
dev_display(Rectangle)
dev_display(ContoursAffinTrans)

******换一张图片找模板
read_image (Image, 'C:/Users/Administrator/Desktop/新建文件夹/RobotAlign/RobotAlign/测试图片/11111111111111111111117.tif')
find_shape_model(Image, ModelID, rad(-180), rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row2, Column2, Angle, Score)
if(|Row2|>0)
    for Index := 0 to |Row2|-1 by 1
        *显示模板轮廓
        hom_mat2d_identity(homMat2D)
        hom_mat2d_translate(homMat2D, Row2[Index], Column2[Index], homMat2D)
        hom_mat2d_rotate(homMat2D, Angle[Index], Row2[Index], Column2[Index], homMat2D)
        get_shape_model_contours(countor, ModelID, 1)
        affine_trans_contour_xld(countor, ContoursAffinTrans1, homMat2D)
        dev_set_color('orange red')
        dev_set_draw('margin')
        dev_display(ContoursAffinTrans1)
        *显示创建模板时的ROI
        hom_mat2d_identity(homMat2D1)
        area_center(Rectangle, Area1, Row3, Column3)
        hom_mat2d_translate(homMat2D1, -Row3, -Column3, homMat2D1)
        hom_mat2d_rotate(homMat2D1, Angle[Index], 0, 0, homMat2D1)
        hom_mat2d_translate(homMat2D1, Row2[Index], Column2[Index], homMat2D1)
        affine_trans_region(Rectangle, RegionAffineTrans, homMat2D1, 'false')
        dev_set_color('blue')
        dev_display(RegionAffineTrans)
        *显示中心十字
        affine_trans_point_2d(homMat2D1, Row3, Column3, Row3, Column3)
        gen_cross_contour_xld(Cross,Row3, Column3, 20, Angle)
        dev_set_color('red')
        dev_display(Cross)
        
    endfor
endif



下面是勇哥写的关于模板匹配的其它贴子,请各位参考:

模板匹配/仿射变换



--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864