第二篇 机器视觉案例 之 骰子点数识别
目录
1.案例要求
识别每一个骰子朝上面的点数,并将点数表明在对应的骰子上
2.案例思路
2.1 使用斑点工具CogBlobTool2 调整极性(白底黑点) + 测得尺寸面积(面积过滤)+ ConnectivityLabel(过滤排除孔) 只获得黑色点数 如图2所示,但无法确定具体每一个骰子的点数,因此考虑给斑点工具设定一个区域 可以考虑再使用一个模板匹配工具CogPMAlignTool或者一个斑点工具CogBlobTool,本案例使用斑点工具
2.2 再使用一个斑点工具CogBlobTool1获得每一个骰子的区域:在测得尺寸的ConnectivityLabel 选择 过滤排除 孔(0),结果如图3所示
2.3 将CogBlobTool2的区域调整为CogPolygon,添加终端 添加输入 Region ,将CogBlobTool1添加终端 添加输出 Results.GetBlobs().item[0].GetBoundary();
3.使用控件
3.1 灰度图像转换工具 ——CogImageConvertTool
VisionPro中一些控件只能针对灰度图像进行操作,所以需要使用灰度图像转换工具来将图像转换成灰度图像
3.2 工具块工具——CogToolBlock
将控件集中起来,创建代码来调用控件的结果集或者批量操作控件等操作
3.3 斑点工具——CogBlobTool
检测斑点、孔的数量面积,其中含有多种属性,例如坐标、面积、周长、宽高等,还可以进行排序,熟练掌握斑点工具会使案例操作简化。
4.代码逻辑
部分代码逻辑
CogBlobTool cbt1 = mToolBlock.Tools["CogBlobTool1"] as CogBlobTool;
CogBlobTool cbt2 = mToolBlock.Tools["CogBlobTool2"] as CogBlobTool;
for(int i = 0;i < cbt1.Results.GetBlobs().Count;i++)
{
cbt2.Region = cbt1.Results.GetBlobs()[i].GetBoundary();
cbt2.Run();
int count = cbt2.Results.GetBlobs().Count;
CogGraphicLabel label = new CogGraphicLabel();
label.SetXYText(cbt1.Results.GetBlobs()[i].CenterOfMassX,cbt1.Results.GetBlobs()[i].CenterOfMassY,count.ToString());
label.Color = CogColorConstants.Red;
label.Font = new Font("宋体",50);
gc.Add(label);//gc是CogGraphicCollection 集合
}
5.效果实现
6.总结
本案例主要考察斑点工具的使用
标签:控件,骰子,案例,VisionPro,斑点,图像,点数,工具 From: https://blog.csdn.net/m0_63509358/article/details/143717845