实际操作 检测缺陷刀片

号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来更加严谨的找到我们需要的有缺陷的工件。

相关推荐
Ronin-Lotus4 小时前
深度学习篇---剪裁&缩放
图像处理·人工智能·缩放·剪裁
cpsvps4 小时前
3D芯片香港集成:技术突破与产业机遇全景分析
人工智能·3d
国科安芯5 小时前
抗辐照芯片在低轨卫星星座CAN总线通讯及供电系统的应用探讨
运维·网络·人工智能·单片机·自动化
AKAMAI5 小时前
利用DataStream和TrafficPeak实现大数据可观察性
人工智能·云原生·云计算
Ai墨芯1115 小时前
深度学习水论文:特征提取
人工智能·深度学习
无名工程师5 小时前
神经网络知识讨论
人工智能·神经网络
nbsaas-boot5 小时前
AI时代,我们更需要自己的开发方式与平台
人工智能
SHIPKING3935 小时前
【机器学习&深度学习】LLamaFactory微调效果与vllm部署效果不一致如何解决
人工智能·深度学习·机器学习
jonyleek7 小时前
如何搭建一套安全的,企业级本地AI专属知识库系统?从安装系统到构建知识体系,全流程!
人工智能·安全
MQ_SOFTWARE7 小时前
AI驱动的金融推理:Fin-R1模型如何重塑行业决策逻辑
人工智能·金融