当前位置: 首页 > article >正文

VisionPro 机器视觉案例 之 凹点检测

第十六篇 机器视觉案例 之 凹点检测

文章目录

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

http://www.kler.cn/a/411202.html

相关文章:

  • 计算(a+b)/c的值
  • 手搓人工智能—聚类分析(下)谱系聚类与K-mean聚类
  • 【算法】连通块问题(C/C++)
  • Spring Boot——统一功能处理
  • 【Linux】TCP网络编程
  • 【通俗理解】隐变量的变分分布探索——从公式到应用
  • JAVA面向对象核心部分
  • C++设计模式之组合模式实践原则
  • 在 Mac(ARM 架构)上安装 JDK 8 环境
  • React 第八节组件生命周期钩子-类式组件,函数式组件模拟生命周期用法
  • 2024小迪安全基础入门第七课
  • 【实用技能】使用 DHTMLX Diagram让复杂流程可视化
  • C++11特性(详解)
  • SQL on Hadoop
  • 文心一言与千帆大模型平台的区别:探索百度AI生态的双子星
  • 网络安全:关于SecOC及测试开发实践简介
  • 华硕笔记本电脑用U盘重装windows系统
  • 自动化立体仓库堆垛机货叉故障处理
  • Faster R-CNN (目标检测)
  • Perforce SAST专家详解:自动驾驶汽车的安全与技术挑战,Klocwork、Helix QAC等静态代码分析成必备合规性工具
  • [自动化测试:实践01]:2:(4-1 )元素定位(selenium)在实际场景中的应用2
  • 【C#小知识】abstract、virtual、override、sealed关键字
  • Webpack前端工程化进阶系列(二) —— HMR热模块更新(图文+代码)
  • SpringBoot整合RabbitMQ应用
  • 避坑ffmpeg直接获取视频fps不准确
  • CBK7运营安全