C# 基于OpenCv的视觉工作流-章44-直线卡尺

C# 基于OpenCv的视觉工作流-章44-直线卡尺

本章目标:
一、卡尺原理;
二、卡尺制作;
三、卡尺定位;
四、卡尺找点;
五、拟合直线;

直线查找,用霍夫直线、边缘提取等方法也可实现,但选取的直线,需过滤处理,且当目标发生位置、角度变化时,过滤的复杂程度变得更难以捉摸。

工业应用中,要对工件进行直线查找测量,往往有更高的要求,如明确性、简单性、高效性、可控性、稳定性等,而稳定性、可控性更是关注重点。稳定性不够就会把合格的判定为不合格,相反类同;可控性要求对算法实现可控、对识别过程可控;给持续优化、提升带来更多的理论依据,由此引出了一种实用的方式,直线卡尺。

一、卡尺原理

在图像中,一条直线表现出来的形式,往往是颜色发生剧烈变化的地方(详细阅读章13-边缘提取),将这些地方瓜分细化来看,其实就是一个个的像素点。反过来,如果先找到这些颜色变化剧烈的交界点,再将这些点拟合成直线,也就找到了所需的直线。

1、划分区域

一条直线,用两个点就可以定义,所以不用捕捉交界处的所有像素点,仅需捕捉到交界处一定数量的代表点即可。本例中将卡尺划分为多个可指定数量的ROI区域,每个ROI区域计算出一个代表点。

2、区域代表点

通过ROI区域,截取出此局部图像,再将图像进行按行或列投影,得到仅一个像素一行或仅一个像素一列的图像,即按行或按列统计像素值(参考章34-投影向量)。

如下图,统计出的像素值结果是一个数组,而数组中像素值发生剧烈变化的地方即为交界点,交界点一般有两处,上升沿和下降沿,至于要取哪个点作为代表点,则由指定的搜索方向决定。本例中如果设置由黑到白取直线,则为上长沿点,由白到黑取直线,则为下降沿点。

二、卡尺制作

卡尺制作需较强的C#基础知识,本文仅介绍关键点,要完全掌握需亲身试验。

1、绘制矩形ROI

创建矩形可如下使用,参数含义网络查询即可;

RectangleF rect = new RectangleF(x, y, width, height);

2、绘制可拖拽的控制小框

同1绘制小的矩形框及圆,接着判断鼠标在控制框时,拖拽实现ROI宽高及角度控制。

3、绘制箭头(扫描方向)

绘制箭头用C#直线绘制,画3根直线即可。需要注意的是箭头方向,随着ROI旋转时自动旋转方向,要点是判断ROI旋转度数在0-360度之间,什么度数,箭头需要何时反向及转多少度。

4、绘制卡尺框

卡尺ROI即图中的青色框,根据设置个数,自动根据红色ROI尺寸,划分为指定个数;

三、卡尺定位

卡尺定位需与模板匹配相互配合,由模板匹配定位出工件的整体位置(解决工件摆放位置、角度的变化问题),在整体位置的坐标基础上,通过仿射变换(参考章20-仿射变换)定位出卡尺位置。

四、卡尺找点

遍历所有模板匹配的匹配对象,根据卡尺定位,截取ROI局部区域图像,按步骤一中描述的原理计算取得各代表点。

五、拟合直线

OpenCv拟合直线可如下使用:

var line = Cv2.FitLine(pointList, DistanceTypes.L2, 0, reps, aeps);

其中:参数1,点数组;

参数2,为距离计算方式;

参数3,为距离计算的附加参数;

参数4,为半径精度(直线到原点的距离精度阈值,默认 0.01)‌,数值越小,精度越高;

参数5,为角度精度(直线方向向量的角度变化阈值,默认 0.01),数值越小,精度越高;

参考链接

https://blog.csdn.net/weixin_40280870/article/details/131351519

https://blog.csdn.net/qq_37299618/article/details/119606955

https://blog.csdn.net/qq_42857680/article/details/126500909

"VisionTool 探迹"免费视觉工具

下载地址:https://pan.baidu.com/s/11tktKOSnepLNIEqNbvnv6w?pwd=qv5i

"VisionTool Halcon"付费视觉工具

下载地址:https://pan.baidu.com/s/1v832KTonDYS6oNnWG2iZtQ?

对应系列文章"C# 基于Halcon的视觉工作流",欢迎前往阅读。

上述内容需要一定的技术功底,本章至此已结束,欢迎阅读下章,谢谢!

相关推荐
chatblog5 分钟前
Codex /goal:给 AI 一个目标,它自己跑一整天
人工智能
数智工坊5 分钟前
【扩散模型超分开山之作】:SR3扩散模型核心原理与全链路解析
论文阅读·人工智能·深度学习·transformer·迁移学习
云天AI实战派7 分钟前
AI 智能体/API 调用故障排查指南:实时语音、Codex 权限与 Spec 驱动开发全流程修复手册
人工智能·驱动开发·chatgpt·api·codex
小程故事多_8010 分钟前
生产级大模型应用后端架构设计指南(从入门到实战)
人工智能·架构·智能体
Championship.23.2412 分钟前
AI驱动的网络安全革命:威胁检测与防御实战指南
人工智能·安全·web安全
贫民窟的勇敢爷们13 分钟前
Scikit-learn算法:从入门到精通的机器学习工具箱
算法·机器学习·scikit-learn
Swift社区13 分钟前
OpenClaw:AI 多线程时代的开始
人工智能·ai·openclaw
Mr数据杨17 分钟前
【Codex】用知识点配置模块构建考试与教学知识图谱
人工智能·django·知识图谱·codex·项目开发
幂律智能20 分钟前
法律人的AI技术词典:从LLM到Agent
大数据·人工智能
LaughingZhu21 分钟前
Product Hunt 每日热榜 | 2026-05-09
人工智能·经验分享·深度学习·神经网络·产品运营