OpenCV實(shí)戰(zhàn) | 低對(duì)比度缺陷檢測(cè)應(yīng)用實(shí)例
點(diǎn)擊下方卡片,關(guān)注“新機(jī)器視覺(jué)”公眾號(hào)
視覺(jué)/圖像重磅干貨,第一時(shí)間送達(dá)
實(shí)例一(LCD屏幕臟污檢測(cè))
https://stackoverflow.com/questions/27281884/low-contrast-image-segmentation
測(cè)試圖像:


標(biāo)注臟污區(qū)域:


分析與說(shuō)明:上圖中的臟污圖像因?yàn)閷?duì)比度較低,所以無(wú)法通過(guò)常用的閾值方法處理提取,有時(shí)人眼觀察也較費(fèi)勁。常用的方法有梯度提取或頻域提取。
鏈接主題中提到了Kmeans聚類分割后提?。?/span>
二分類:

三分類:

乍一看效果還不錯(cuò),但問(wèn)題是我到底應(yīng)該設(shè)置幾個(gè)類別?第一張圖我如何確定哪個(gè)區(qū)域正好是我的缺陷部分?本文采用了梯度方法來(lái)檢測(cè)。
實(shí)現(xiàn)步驟與演示
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) # 轉(zhuǎn)回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) #結(jié)果顯示

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)

圖像二:

—版權(quán)聲明—
僅用于學(xué)術(shù)分享,版權(quán)屬于原作者。
若有侵權(quán),請(qǐng)聯(lián)系微信號(hào):yiyang-sy 刪除或修改!
評(píng)論
圖片
表情
