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