基于opencv的纸张表面质量检测算法中

基于opencv的纸张表面质量检测算法中,第1张

opencv里面是没有那种算法的,它只是提供一些常用的计算函数。具体的算法,由于你的需求比较特殊,相信应该没有现成的瑕疵检测算法,好在你的简行正需求难度应该不大,通过常用的图像识别算法,比如纹理算法(Gabor算法)、SURF算法就可以找到白纸上瑕疵,这些瑕疵都是相当于一张白纸的特征点嘛!基本思想就是借用图像识别、匹配过程的思想带改——找图像上的特征拦悔点。白纸一般是提取不出特征点的,要是提取出来了,那就说明白纸上有东西(洞、褶皱或者异物)。

Mat src = imread(...图片路径)

Mat src_gray// 保存灰度图

Mat src_binary// 保存二值图

int Threshold1 = 100// 阀值

int Threshold2 = 255

cvtColor(src, src_gray, CV_BGR2GRAY)

threshold(src_gray, src_binary, Threshold1, Threshold2, CV_THRESH_BINARY)

// 反色(黑模盯慧色背景)

//旦答 bitwise_not(src_binary, src_binary)

// 查找图像的所有轮廓

vector<vector<Point>>contours_temp

findContours(src_binary, contours_temp, RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0))

// 筛选的面积限则历定值

double min_area = 100

// 筛选轮廓

for (int i = 0i <contours_temp.size()i++)

{

// 第i个轮廓的面积,

// false:表示某一个方向上轮廓的的面积值,顺时针或者逆时针,一般选择默认false

double contour_area = contourArea(contours_temp[i], false)

// 如果该轮廓的面积小于限定值,那么就判定为黑点

if (contour_area <min_area)

{

...

}

}

根据不同的需求来进行不同的处理

1 空洞 这个肯定是像素颜色和周边的不同 建议用阈值分割 然后轮廓检测

2 褶皱 这个褶皱肯定会有梯度的清芹变化 建议检测边缘 再计算褶皱的梯度信息

3 划痕 这个和上一个问题相似 但是也有不同 应该是梯洞正橘纳团度的方向和强度不同(一个是凹一个是凸)

4 斑点 如果只是点点星星的 opencv里也有很多角点检测算法 比如 surf fast ORB等


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12529922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存