第十六篇 机器视觉案例 之 凹点检测
文章目录
- 第十六篇 机器视觉案例 之 凹点检测
- 1.案例要求
- 2.实现思路
- 2.1 方式一:斑点工具加画线工具加点线距离工具
- 2.2 方法二 使用斑点工具的结果集边缘坐标的横坐标最大值ImageBoundMaxX
- 2.3 方法三 使用斑点工具的结果集凹点结果集 ConvexHull()
- 3.使用控件
- 3.1 斑点工具 —— CogBlobTool
- 3.2 画线工具 —— CogCreateLineTool
- 3.3 点到线距离工具 —— CogDistancePointLineTool
- 4.代码逻辑
- 5.实现效果
- 6.知识点总结
- 6.1 坐标排序
1.案例要求
检测两个凹点的坐标
2.实现思路
2.1 方式一:斑点工具加画线工具加点线距离工具
-
设置斑点工具的区域
-
在靠近凹点的一侧画一条垂直的直线
-
循环遍历斑点图像的每一个点到到直线的距离,距离最短的两个区域即为凹点区域,对应的点就是凹点
2.2 方法二 使用斑点工具的结果集边缘坐标的横坐标最大值ImageBoundMaxX
- 同方法一设置斑点工具的区域,将极性设置为黑底白点
- 此时斑点边缘最右侧的点即凹点
2.3 方法三 使用斑点工具的结果集凹点结果集 ConvexHull()
- 同方法二斑点工具的区域和极性设置
- ConvexHull
3.使用控件
3.1 斑点工具 —— CogBlobTool
- 设定区域
- 使用结果集ConvexHull/GetVertexX
3.2 画线工具 —— CogCreateLineTool
3.3 点到线距离工具 —— CogDistancePointLineTool
4.代码逻辑
using System.Collections.Generic;
//引入list列表的相关命名空间
//定义一个point类用于存贮坐标点
public class Point
{
public double x ;
public double y ;
public Point(double x,double y)
{
this.x = x;
this.y = y;
}
}
private CogGraphicCollection gc = new CogGraphicCollection();
private List<Point> list = new List<Point>();
CogBlobTool cbt = mToolBlock.Tools["CogBlobTool1"] as CogBlobTool;
int count = cbt.Results.GetBlobs()[0].GetBoundary().ConvexHull().GetVertices().Length / 2;
CogGraphicLabel l = new CogGraphicLabel();
l.SetXYText(100, 100, count.ToString());
gc.Add(l);
for(int i = 0 ;i < count ;i++)
{
double x = cbt.Results.GetBlobByID(0).GetBoundary().ConvexHull().GetVertexX(i);
double y = cbt.Results.GetBlobByID(0).GetBoundary().ConvexHull().GetVertexY(i);
list.Add(new Point(x,y));
}
list.Sort((p1,p2) => p1.x.CompareTo(p2.x));
list.Reverse();
for(int i = 0;i < 3;i++)
{
CogCircle c = new CogCircle();
c.Color = CogColorConstants.Red;
c.CenterX = list[i].x;
c.CenterY = list[i].y;
c.LineWidthInScreenPixels = 4;
c.Radius = 2;
gc.Add(c);
}
5.实现效果
6.知识点总结
6.1 坐标排序
list.Sort((p1,p2) => p1.x.CompareTo(p2.x));
list.Reverse();