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

06OpenCVSharp角点检测与检测平整度

06OpenCVSharp 角点检测 检测平整度。 代码仅供参考。

工厂里检测金属板平整度这事可太常见了。老师傅拿个游标卡尺左量右测,咱们程序猿当然要琢磨怎么用代码搞定。今天说个骚操作——用角点检测判断平面平整度,听着不靠谱?别急,看完代码再说。

先整张带折痕的铝板照片(图1),咱们用OpenCVSharp开搞。核心代码就二十行:

var src = Cv2.ImRead("metal_sheet.jpg", ImreadModes.Color); var gray = new Mat(); Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY); // 关键参数在这! var corners = Cv2.GoodFeaturesToTrack( gray, maxCorners: 50, qualityLevel: 0.01, minDistance: 10); foreach (var p in corners) { Cv2.Circle(src, (int)p.X, (int)p.Y), 5, Scalar.Red, -1); }

这GoodFeaturesToTrack方法用的是Shi-Tomasi角点检测算法。重点看三个参数:maxCorners控制最大角点数,试过设成100结果满屏红点根本没法看;qualityLevel是筛选阈值,我习惯从0.01开始慢慢调;minDistance决定角点间最小间距,防止扎堆。

跑完代码发现个怪现象:平整区域角点分布均匀,但有折痕的地方突然冒出密集红点(图2)。后来想明白了——材料变形导致表面纹理产生不规则突变,算法把这些突变点都当角点了。反过来想,这不正好用来检测缺陷么?

06OpenCVSharp 角点检测 检测平整度。 代码仅供参考。

进阶玩法可以统计角点分布方差。写个统计函数:

double CalculateSpreadVariance(Point2f[] points) { var center = new Point2f( points.Average(p => p.X), points.Average(p => p.Y)); return points.Sum(p => Math.Pow(p.X - center.X, 2) + Math.Pow(p.Y - center.Y, 2)); }

算出来的方差值越大,说明表面平整度越差。实测效果比单纯看角点数量靠谱,毕竟有些材料本身就有规则纹理。

遇到过坑爹情况:反光严重的金属板会干扰检测。解决方法先做个直方图均衡化:

var clahe = Cv2.CreateCLAHE(2.0, new Size(8,8)); clahe.Apply(gray, gray);

对比度拉高后,表面细微凹凸更容易被识别。不过CLAHE的参数要看具体材质,不锈钢和铝板的最佳参数能差三倍。

最后提醒,别拿这方法去检航天零件哈!工业场景要求99.9%精度时还是得上激光扫描。但日常质检应付个把毫米级误差,这套代码足够让质检大姐少唠叨你两回了。

http://www.jsqmd.com/news/608789/

相关文章:

  • 2026年4月国内汽车后视镜热弯模具直销厂家,铝行业精炼用热鼎盘/硅酸钙保温管,汽车后视镜热弯模具直销厂家推荐分析 - 品牌推荐师
  • Nginx本地缓存
  • 扫雷游戏(优化)
  • 避坑指南:ESP32C3开发板音频系统常见问题排查(I2S+ES8311实战)
  • AI新手必读:从零开始,彻底搞懂AIGC与大模型(收藏版)
  • 别再死记硬背SAC公式了!用CleanRL代码逐行拆解,手把手教你理解熵正则化与重参数化
  • 抖音无水印下载神器:三分钟掌握批量下载技巧
  • 项目实训——大数据租房推荐智能体(爬虫部分1)
  • 20251906 2025-2026-2 《网络攻防实践》第三周作业
  • 第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组个人题解
  • 【Linux复习】:进程信号
  • Qwen2-VL-2B多模态向量模型教程:图文嵌入向量用于多标签图像分类迁移学习
  • RFID智能柜-RFID智能柜厂家推荐 - 聚澜智能
  • Dell R720服务器安装Ubuntu避坑指南:从BIOS设置到分区优化全流程
  • Nginx本地缓存API
  • 程序控制结构
  • Altium AD20差分对走线实战:如何用交互式布线快速搞定高速信号线
  • ABAQUS用户子程序进阶指南——UMAT参数详解与实战配置
  • 通俗秒懂:储能控制器在电网调频中的关键作用与实现原理
  • 软件需求工程教案
  • Golang如何设置HTTP路由_Golang HTTP路由教程【实用】
  • 一张图看懂巴菲特 48 年投资帝国:知识图谱效果全展示
  • 别再手动配环境了!用ModelScope官方镜像5分钟搞定AI模型运行环境(附最新CPU/GPU镜像地址)
  • 【转载】ROS 中 CMakeLists.txt 文件使用的讲解与总结
  • Workstation 避坑指南:网络总连不上?深度解析常见网络配置故障与底层排错逻辑
  • 【计算机网络八股】【欧弟求职】TCP相关
  • 一台服务器跑4个独立站,我是怎么做到的?
  • 魔兽争霸III终极优化指南:免费解决老游戏在现代电脑的兼容性问题
  • RFID智能柜-RFID智能柜公司推荐 - 聚澜智能
  • 如何用 every 判断数组是否所有元素都满足特定条件