第六篇 机器视觉案例 之 火花塞
文章目录
1.案例要求
工业相机下火花塞的图像
需要测量的尺寸如下图:A、B、C尺寸
2.实现思路
2.1 A尺寸测量
即点a 到 线a 的距离,使用模板匹配确定点a位置,使用找线工具CogFindLineTool找到线a,再使用测量点到线的距离工具CogDistancePointLineTool测量出距离即尺寸A
2.2 B尺寸测量
如图,B尺寸即点b到过点a线的距离,使用模板匹配工具得到点b坐标,画线工具得到过点a直线,使用点到线距离工具测量出距离即B尺寸
2.3 C尺寸测量
如图,C尺寸为点a到直线b的距离,画线工具CogCreateLineTool画一条过点b直线b,点a在2.1已经找到,再使用点到线距离工具测出距离即C尺寸
3.使用控件
3.1 模板匹配工具 —— CogPMAlignTool
点a模板匹配
点b模板匹配界面
3.2 找线工具 —— CogFindLineTool
找线工具找到线a
3.3 画线工具 —— CogCreateLineTool
画线工具画出过点a的直线
画线工具画出线b
3.4 点到线距离工具 —— CogDistancePointLineTool
A尺寸测量界面,在左侧工具栏将点、线输入给工具,其余两个尺寸类似
4.代码逻辑
List<CogDistancePointLineTool> DPL = new List<CogDistancePointLineTool>();
DPL.Add(mToolBlock.Tools["CogDistancePointLineTool1"] as CogDistancePointLineTool);
DPL.Add(mToolBlock.Tools["CogDistancePointLineTool2"] as CogDistancePointLineTool);
DPL.Add(mToolBlock.Tools["CogDistancePointLineTool3"] as CogDistancePointLineTool);
List<CogPMAlignTool> CPMA = new List<CogPMAlignTool>();
CPMA.Add(mToolBlock.Tools["CogPMAlignTool2"] as CogPMAlignTool);
CPMA.Add(mToolBlock.Tools["CogPMAlignTool1"] as CogPMAlignTool);
CPMA.Add(mToolBlock.Tools["CogPMAlignTool3"] as CogPMAlignTool);
string[] name = {"A","B","C"};
//声明控件
gc.Clear();
//清除集合内容
for(int i = 0; i < 3; i++)
{
CogGraphicLabel label = new CogGraphicLabel();
label.SetXYText(CPMA[i].Results[0].GetPose().TranslationX, CPMA[i].Results[0].GetPose().TranslationY, name[i]+"尺寸:"+DPL[i].Distance.ToString("F2"));
label.Font = new Font("楷体", 25);
label.Color = CogColorConstants.Magenta;
gc.Add(label);
}
//输出A、B、C尺寸
double distance_a = DPL[0].Distance;
double distance_b = DPL[1].Distance;
double distance_c = DPL[2].Distance;
//获得距离
CogGraphicLabel label_isok = new CogGraphicLabel();
label_isok.Font = new Font("楷体",50);
if((distance_a >= 285 && distance_a <= 295) && (distance_b >= 320 && distance_b <= 330) && (distance_c >= 585 && distance_c <= 595))
{ //这里假设A合格的范围为285-295 B合格的范围为320-330 C合格的范围为585-595
label_isok.SetXYText(500, 500,"控件OK");
label_isok.Color = CogColorConstants.Green;
}else
{
label_isok.SetXYText(500, 500, "控件NG");
label_isok.Color = CogColorConstants.Red;
}
gc.Add(label_isok);