下面是标准位置的图片,使用使用它创建了一个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函数名是保持一致的!)。
有些例程使用的素材是一些实际项目中的图片,因为尺寸较大,通常放于网盘供大家下载。
有些例程及素材压缩包是有密码的,需要你打赏作者取密码。作者用所得款项维持建站费用。

