下面是标准位置的图片,使用使用它创建了一个shape model,名字为:Matching 02.shm

下图是需要做模板匹配,摆正姿式的图片。

下图是模板匹配后,再使用仿射运算后旋转到正确位置的图像。

源代码:
//find_shape_model
var winHandle = win.HalconWindow;
var ModelId=halcon.read_shape_model(@"C:\Users\Administrator\Desktop\halcon例子\Matching 02.shm");
var ModelContours=halcon.get_shape_model_contours(ModelId, 1);
var Image1=halcon.read_image(@"C:\Users\Administrator\Desktop\halcon例子\边到圆心距离3.bmp");
var res1=halcon.get_image_size(Image1);
halcon.set_part(winHandle, 0, 0,res1.height, res1.width);
halcon.dev_display(Image1, winHandle);
(HTuple ModelRow, HTuple ModelColumn, HTuple ModelAngle, HTuple ModelScore) = halcon.find_shape_model(Image1, ModelId, halcon.rad(0), halcon.rad(360),
0.5, 1, 0.5, vFunBaseMethod.findssModelSubPixelEnum.least_squares, new int[]{ 8}, 0.75);
if (ModelScore.TupleLength() == 0)
{
MessageBox.Show("No Object");
Image1.Dispose(); ModelContours.Dispose();
return;
}
else if (ModelScore.TupleLength() != 1)
{
MessageBox.Show("Not only one object");
Image1.Dispose(); ModelContours.Dispose();
return;
}
else
{
for (int i = 0; i < ModelScore.TupleLength(); i++)
{
ShowAlarm.Delay(2000);
var RectificationRow = 1043;
var RectificationCol= 1105;
var HomMat=halcon.hom_mat2d_identity();
var HomMat2DTranslate=halcon.hom_mat2d_translate(HomMat, (int)(RectificationRow - ModelRow.D),
(int)(RectificationCol - ModelColumn.D));
HomMat = halcon.hom_mat2d_rotate(HomMat, -ModelAngle.TupleSelect(i).D, RectificationRow, RectificationCol);
var ImageAffinTrans=halcon.affine_trans_image(Image1, HomMat, vFunBaseMethod.atImageInterpolationEnum.constant, false);
halcon.dev_display(ImageAffinTrans, winHandle);
ImageAffinTrans.Dispose();
}
}
Image1.Dispose();
ModelContours.Dispose();基于netMarketing的视觉例程的说明:
netMarketing是一个综合类库,其视觉部分的功能基于halcon,作者开发时的halcon版本为10
要运行上面的程序,建议使用C#7.0,即VS2017的C#,其新增加的Tuple语法糖可以简化调用类似halcon这种函数变态多的参数的情况,它会节省你大量编码时间。
如果下载使用netMarketing? 请查阅这个链接: http://47.98.154.65/?id=202
netMarketing封装了自动化行业常用的视觉功能,以及包装了halcon的常用算子,以符合C#函数的调用习惯。事实上,你可以直接把halcon代码复制到C#中,简单修改一下即可使用(因为封装的函数名和halcon函数名是保持一致的!)。
有些例程使用的素材是一些实际项目中的图片,因为尺寸较大,通常放于网盘供大家下载。
有些例程及素材压缩包是有密码的,需要你打赏作者取密码。作者用所得款项维持建站费用。


少有人走的路



















