Halcon基于相关性模板匹配的实例【二】

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

* Image Acquisition 03: Code generated by Image Acquisition 03
*打开相机
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'gray', -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, 498.367, 931.375, rad(-75.75), 121.875, 80.5742)

*获得矩形的行列坐标
area_center (ROI_0, Area, Row, Column)
*抠图
reduce_domain (Image, ROI_0, ImageReduced)

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

*定义区域填充模式。
dev_set_draw ('margin')
*显示图片
dev_display (Image)

while (true)
    grab_image_async (Image, AcqHandle, -1)
    *起始角度和终止角度改为rad(0)-rad(360)
    *寻找模板
    find_ncc_model (Image, ModelID, rad(0), rad(360), 0.5, 1, 0.5, 'true', 0, Row1, Column1, Angle, Score)
    
    *判断区域有没有目标,否则会报错
    if(|Score|>0)
         
        *仿射变化起始角度从0开始,而不是抠图出的矩形的角度
        vector_angle_to_rigid (Row, Column, 0, Row1, Column1, Angle, HomMat2D)
        affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
    
        *显示图片
        dev_display(Image)
        dev_display (RegionAffineTrans)
    
    endif
endwhile
*关闭相机
close_framegrabber (AcqHandle)

 结果:

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

*仿射变化起始角度从0开始,而不是抠图出的矩形的角度
*vector_angle_to_rigid (Row, Column, 0, Row1, Column1, Angle, HomMat2D)
*affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
   
*可替换以下算子 结果是一样的 
dev_display_ncc_matching_results (ModelID, 'green', Row1, Column1, Angle, 0)

若加入多个夹子:

while (true)
    grab_image_async (Image, AcqHandle, -1)
    *起始角度和终止角度改为rad(0)-rad(360)
    *寻找模板
    *默认1改为2 
    find_ncc_model (Image, ModelID, rad(0), rad(360), 0.5, 2, 0.5, 'true', 0, Row1, Column1, Angle, Score)
    
     *判断区域有没有目标,否则会报错
     if(|Score|>0)

    *进行for循环,有多少个夹子就设置几
     for j:=1 to 2 by 1

    *仿射变化起始角度从0开始,而不是抠图出的矩形的角度
    *行、列、角度都改为对应的数组
    vector_angle_to_rigid (Row, Column, 0, Row1[j-1], Column1[j-1], Angle[j-1], HomMat2D)
    affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D, 'nearest_neighbor')

    **可替换以下算子 结果是一样的 
    *dev_display_ncc_matching_results (ModelID, 'green', Row1, Column1, Angle, 0)

    dev_display(Image)
    *dev_display (RegionAffineTrans)
      endfor
     endif
    
endwhile

结果: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值