实际操作 检测缺陷刀片

devtools/2025/2/5 7:30:26/

号he

找到目标图像的缺陷位置,首先思路为对图像进行预处理,灰度-二值化-针对图像进行轮廓分析

//定义结构元素
Mat se = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
morphologyEx(thre, tc, MORPH_OPEN, se, Point(-1, -1), 1);

目标图形为矩形,RECT,大概在3,3可以自己调整 位置在中心-1,-1.与开操作对图像进行处理

if (rect.height > (height / 2)) {
            continue;
        }
        if (area < 150) {
            continue;
        }根据不同的素材来做筛选,例如此类型就是以图形的行和面积来作为筛选条件,

1,rectangle(frame, rect, Scalar(0, 0, 255), 2, 8, 0);
drawContours(image, contours, t, Scalar(0, 0, 255), 2, 8);效果

2,rectangle(frame, rect, Scalar(0, 0, 255), 2, 8, 0);
drawContours(frame, contours, t, Scalar(0, 0, 255), 2, 8);效果

做好框架处理后进行目标工件的排序处理,此列以冒泡排序从小到大排序

void sort_box(vector<Rect>& boxes) {
    int size = boxes.size();
    for (int i = 0; i < size - 1; i++) {
        for (int j = i; j < size; j++) {
            int x = boxes[j].x;
            int y = boxes[j].y;
            if (y < boxes[i].y) {
                Rect temp = boxes[i];
                boxes[i] = boxes[j];
                boxes[j] = temp;
            }
        }
    }
}

进行排序好后可以从putText来验证排序结果,初始为6-0,改好后为0-6



前期的图像处理完毕,后面的思路要对模板图像以及后面的图像进行对比生成mask来确认具有缺陷的刀片。

tpl为刚才观察到的形态良好的工件,将其提取后与其他工件进行对比做差,对Mask进行开操作后观察

将白色部分的尺寸打印出来作为筛选

将白色像素大于50的打印出来

 

运行后发现出现了误检测,因为刀片宽度不统一,所以容易识别错误,所以需要在已经检测到的关键框架进行进一步的筛选。很明显的可以看到最后一个被误检测。首先对筛选出来的图像进行进一步处理

这样可以通过find来更加严谨的找到我们需要的有缺陷的工件。


http://www.ppmy.cn/devtools/156207.html

相关文章

分布式微服务系统架构第91集:系统性能指标总结

加群联系作者vx&#xff1a;xiaoda0423 仓库地址&#xff1a;https://webvueblog.github.io/JavaPlusDoc/ 系统性能指标总结 系统性能指标包括哪些&#xff1f; 业务指标、资源指标、中间件指标、数据库指标、前端指标、稳定性指标、批量处理指标、可扩展性指标、可靠性指标。 …

制作一款将黑白照片、视频变成彩色模型

将黑白照片或视频转换为彩色&#xff08;Image/Video Colorization&#xff09;的AI模型&#xff0c;通常涉及深度学习和计算机视觉技术。以下是完整的实现流程&#xff1a; 1. 任务定义 彩色化&#xff08;Colorization&#xff09;任务的目标是&#xff1a; 输入&#xff1…

2024年MR应用深度解析:Meta商店中的游戏与非游戏应用

随着混合现实(MR)技术的不断进步,越来越多的应用开始集成这种新型交互方式。本文基于对Meta商店中部分具有代表性的MR应用的研究,探讨了游戏与非游戏类应用之间的对比分析,并深入细分每个类别下的亮点推荐。 数据收集方法 本报告聚焦于那些具备MR组件的应用程序,包括从…

DeepSeek如何微调成智能制造专用大模型?

将DeepSeek微调成智能制造专用大模型&#xff0c;关键在于结合智能制造领域的专业数据与合适的微调方法。以下是一个基于DeepSeek模型的微调案例示例&#xff0c;假设我们使用LoRA&#xff08;Low - Rank Adaptation&#xff09;技术进行高效微调。 1. 准备工作 安装依赖库 …

C++继承的基本意义

文章目录 一、继承的本质和原理二、重载、隐藏和覆盖三、基类与派生类的转换 一、继承的本质和原理 继承的本质&#xff1a;a. 代码的复用 b. 类和类之间的关系&#xff1a; 组合&#xff1a;a part of… 一部分的关系 继承&#xff1a;a kind of… 一种的关系 总结&#xff…

【华为OD-E卷 - 任务最优调度 100分(python、java、c++、js、c)】

【华为OD-E卷 - 任务最优调度 100分&#xff08;python、java、c、js、c&#xff09;】 题目 给定一个正整数数组表示待系统执行的任务列表&#xff0c;数组的每一个元素代表一个任务&#xff0c;元素的值表示该任务的类型。 请计算执行完所有任务所需的最短时间。 任务执行规…

【协议详解】卫星通信5G IoT NTN SIB33-NB 信令详解

一、SIB33信令概述 在5G非地面网络&#xff08;NTN&#xff09;中&#xff0c;卫星的高速移动性和广域覆盖特性使得地面设备&#xff08;UE&#xff09;需要频繁切换卫星以维持连接。SIB32提供了UE预测当前服务的卫星覆盖信息&#xff0c;SystemInformationBlockType33&#x…

【Leetcode刷题记录】45. 跳跃游戏 II--贪心算法

45. 跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 num…