第十六篇 机器视觉案例 之 凹点检测
文章目录
- 第十六篇 机器视觉案例 之 凹点检测
- 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();