Halcon基于形状模板匹配的实战【二】

此处用代码复刻,结果与匹配助手显示的结果一样

* Image Acquisition 01: Code generated by Image Acquisition 01
*打开相机
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] Web Camera', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)

*创建模板,先把相机截取的图片显示出来grab_image_start (AcqHandle, -1)
grab_image_async (Image, AcqHandle, -1)

*用ROI画出矩形
gen_rectangle2 (ROI_0, 291.907, 1059.07, rad(-90), 138.921, 92.1362)
*抠图
reduce_domain (Image, ROI_0, ImageReduced)

*起始角度和终止角度由0-0改为rad(0)-rad(360)
*创建模板
create_scaled_shape_model (ImageReduced, 'auto',rad(0), rad(360), 'auto', 0.9, 1.1, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)

*或者模板的轮廓
get_shape_model_contours (Model, ModelID, 1)

*设置颜色
dev_set_color ('red')
*设置线宽
dev_set_line_width (3)

while (true)
    grab_image_async (Image, AcqHandle, -1)
   *起始角度和终止角度改为rad(0)-rad(360)
    *寻找模板
    find_scaled_shape_model (Image, ModelID, rad(0), rad(360), 0.9, 1.1, 0.5, 10, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Scale, Score)

    *判断区域有没有目标,否则会报错
    if(|Score|>0)
       
    *一个一个目标显示
    for I := 0 to |Score| - 1 by 1
    *单位矩阵
    hom_mat2d_identity (HomMat2DIdentity)
    *平移矩阵
    hom_mat2d_translate (HomMat2DIdentity, Row[I], Column[I], HomMat2DTranslate)
    *旋转矩阵
    hom_mat2d_rotate (HomMat2DTranslate, Angle[I], Row[I], Column[I], HomMat2DRotate)
    *缩放矩阵
    hom_mat2d_scale (HomMat2DRotate, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)
    
    *显示轮廓
    affine_trans_contour_xld (Model, ModelTrans, HomMat2DScale)
    dev_display (Image)
    dev_display (ModelTrans)
endfor
    
    endif
endwhile
*关闭相机
close_framegrabber (AcqHandle)

 结果:

 注:这里的仿射变换可以替换成其他算子

    *单位矩阵
    hom_mat2d_identity (HomMat2DIdentity)
    *平移矩阵
    hom_mat2d_translate (HomMat2DIdentity, Row[I], Column[I], HomMat2DTranslate)
    *旋转矩阵
    hom_mat2d_rotate (HomMat2DTranslate, Angle[I], Row[I], Column[I], HomMat2DRotate)
    *缩放矩阵
    hom_mat2d_scale (HomMat2DRotate, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)
    
    *-----------------------
    *可以用以下算子代替
    vector_angle_to_rigid (0, 0, 0, Row[I], Column[I], Angle[I], HomMat2D1)
    *缩放矩阵
    hom_mat2d_scale (HomMat2D1, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)

结果:

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值