汕头网页模板建站网站建设在哪里推广
第十八篇 机器视觉案例 之 连接件测量
文章目录
- 第十八篇 机器视觉案例 之 连接件测量
 - 1.案例要求
 - 2.实现思路
 - 2.1 测量圆心到直线的距离
 - 2.2 测量圆心到直线起点的连线和直线的夹角
 
- 3.使用控件
 - 3.1 模板匹配工具 —— CogPMAlignTool
 - 3.2 定位工具 —— CogFixtureTool
 - 3.3 卡尺工具 —— CogCaliperTool
 - 3.4 画线工具 —— CogCreateLineTool
 - 3.5 找圆工具 —— CogFindCircleTool
 - 3.6 画线工具 —— CogCreateSegmentTool
 - 3.7 点到线距离工具 —— CogDistancePointLineTool
 - 3.8 线线夹角工具 —— CogAngleLineLineTool
 
- 4.代码逻辑
 - 5.实现效果
 - 6.知识点总结
 - 6.1 弧度角度之间的转换
 
1.案例要求

 
1.测量圆心到直线距离
2.测量圆心到直线起点的连线和直线的夹角
- 本案例还可以通过Halcon实现,参考文章:Halcon 机器视觉案例 之 连接件测量
 
2.实现思路
2.1 测量圆心到直线的距离
-  
即点到线距离,使用点线距离工具 CogDistancePointLineTool

-  
需要获得一点坐标→圆心坐标→使用找圆工具CogFindCircleTool

- 找圆工具需要圆的大致位置→对连接件圆的部分进行模板匹配

 
 - 找圆工具需要圆的大致位置→对连接件圆的部分进行模板匹配
 -  
需要获得一条直线→使用画线工具CogCreateLineTool

-  
画线工具需要一个点(连接件边上的点)→使用卡尺工具CogCaliperTool

 -  
卡尺工具需要连接件边的位置→对连接件上侧边进行模板匹配CogPMAlignTool

 -  
每一张图片的连接件位置不固定→需要使用标定工具CogFixtureTool为图像设置坐标系

 -  
标定工具需要图像变化的角度→对整个连接件进行模板匹配

 
 -  
 
 -  
 
2.2 测量圆心到直线起点的连线和直线的夹角
- 线线夹角使用线线夹角测量工具CogAngleLineLineTool
 - 需要两条线,一条连接件上的线1,一条圆心到线1起点的直线2,线1在2.1已经画出,只需找到线2,使用创建线段工具CogCreateSegementTool

 
 - 需要两条线,一条连接件上的线1,一条圆心到线1起点的直线2,线1在2.1已经画出,只需找到线2,使用创建线段工具CogCreateSegementTool
 
3.使用控件
3.1 模板匹配工具 —— CogPMAlignTool
-  
1.对连接件整体进行模板匹配

 -  
2.对连接件圆形部分进行模板匹配

 -  
3.对连接件上边缘进行模板匹配

 
注:对于CogPMAlignTool模板匹配工具的使用详解,可以参考文章:VisionPro 机器视觉控件篇 之 模板匹配工具 CogPMAlignTool
3.2 定位工具 —— CogFixtureTool
- 获得对整个模板匹配工具结果中的参数

 
3.3 卡尺工具 —— CogCaliperTool
- 使用标定后的图像和模板匹配的坐标点

 
3.4 画线工具 —— CogCreateLineTool

3.5 找圆工具 —— CogFindCircleTool
-  
在添加终端中添加找圆工具的坐标输入

 -  
输入坐标,修改调整参数

 
3.6 画线工具 —— CogCreateSegmentTool
- 输入圆心坐标和直线1起点坐标

 
3.7 点到线距离工具 —— CogDistancePointLineTool

3.8 线线夹角工具 —— CogAngleLineLineTool

4.代码逻辑
- 声明全局集合
 
  private CogGraphicCollection gc = new CogGraphicCollection();
 
- 核心代码
 
    CogDistancePointLineTool dpl = mToolBlock.Tools["CogDistancePointLineTool1"] as CogDistancePointLineTool;CogAngleLineLineTool agl = mToolBlock.Tools["CogAngleLineLineTool1"] as CogAngleLineLineTool;CogPMAlignTool pma = mToolBlock.Tools["CogPMAlignTool3"] as CogPMAlignTool;//声明控件double x_angle = pma.Results[0].GetPose().TranslationX + 200;double y_angle = pma.Results[0].GetPose().TranslationY + 50;double x_distance = dpl.X;double y_distance = dpl.Y-300;//获取坐标点并添加偏移量使得文本位置合适CogGraphicLabel label_angle = new CogGraphicLabel();CogGraphicLabel label_distance = new CogGraphicLabel();//创建labeldouble rad = agl.Angle;double ang =  rad * (180 / Math.PI);//弧度转角度double distance = dpl.Distance;//获得距离label_angle.SetXYText(x_angle,y_angle,"角度为:"+ang.ToString("F2"));label_angle.Font = new Font("楷体",20);label_angle.Color = CogColorConstants.Magenta;label_distance.SetXYText(x_distance,y_distance,"距离为:"+distance.ToString("F2"));label_distance.Font = new Font("楷体",20);label_distance.Color = CogColorConstants.Magenta;//为label赋值gc.Clear();gc.Add(label_angle);gc.Add(label_distance);
 
- 输出到图像
 
foreach(ICogGraphic gc1 in gc){mToolBlock.AddGraphicToRunRecord(gc1,lastRecord,"CogFixtureTool1.OutputImage","");}
 
5.实现效果

6.知识点总结
6.1 弧度角度之间的转换
- 1.使用公式计算 
- 角度 = 弧度 × (180/π)
 - π在C#中用 Math.PI 表示
 double angle = rad * (180 / Math.PI)
 - 2.使用函数CogMisc.RadToDeg() 
- 角度转弧度就是CogMisc.DegToRad()
 double angle = CogMisc.RadToDeg(rad)
 
