OpenCV实战 | 低对比度缺陷检测应用实例

共 2051字,需浏览 5分钟

 ·

2021-08-09 14:48



点击下方卡片,关注“新机器视觉”公众号


视觉/图像重磅干货,第一时间送达








导读



本文主要介绍OpenCV在低对比度缺陷检测中的应用实例





实例一(LCD屏幕脏污检测)




参考实例来源:

https://stackoverflow.com/questions/27281884/low-contrast-image-segmentation


测试图像:




标注脏污区域:




分析与说明:上图中的脏污图像因为对比度较低,所以无法通过常用的阈值方法处理提取,有时人眼观察也较费劲。常用的方法有梯度提取或频域提取。


链接主题中提到了Kmeans聚类分割后提取:


二分类:



三分类:



乍一看效果还不错,但问题是我到底应该设置几个类别?第一张图我如何确定哪个区域正好是我的缺陷部分?本文采用了梯度方法来检测。



实现步骤与演示




实现步骤:


① 图像滤波--滤除杂讯;


② Sobel提取边缘;


③ 形态学处理剔除杂讯;


④ 阈值提取--分割脏污区域;


⑤ 轮廓提取与标注。


图像一






gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)blur = cv2.GaussianBlur(gray,(15,15),0)















x = cv2.Sobel(blur,cv2.CV_16S,1,0,ksize=7)y = cv2.Sobel(blur,cv2.CV_16S,0,1,ksize=7)absX = cv2.convertScaleAbs(x) # 转回uint8absY = cv2.convertScaleAbs(y)edged = cv2.addWeighted(absX,1,absY,1,0)cv2.imshow('Sobel', edged)









k1=np.ones((11,11), np.uint8)thres = cv2.morphologyEx(thres, cv2.MORPH_ERODE, k1)#膨胀操作cv2.imshow('MORPH_ERODE',thres) #结果显示











contours,hierarchy = cv2.findContours(thres, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)for cnt in contours:  (x, y, w, h) = cv2.boundingRect(cnt)  if w > 2 and h > 2:    cv2.drawContours(img,cnt,-1,(0,0,255),1)



图像二






































—版权声明—


仅用于学术分享,版权属于原作者。


若有侵权,请联系微信号:yiyang-sy 删除或修改!







—THE END—





















浏览 91
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报