導讀本文主要介紹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)
—版權聲明—
僅用于學術分享,版權屬于原作者。
若有侵權,請聯系刪除或修改!
編輯:jq
-
lcd
+關注
關注
34文章
4437瀏覽量
168028 -
缺陷檢測
+關注
關注
2文章
144瀏覽量
12259 -
OpenCV
+關注
關注
31文章
635瀏覽量
41445
原文標題:OpenCV實戰 | 低對比度缺陷檢測應用實例
文章出處:【微信號:gh_f39db674fbfd,微信公眾號:尖刀視】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論