此处用代码复刻,结果与匹配助手显示的结果一样
* 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
结果: