缺陷檢測(cè),分為兩個(gè)部分,一個(gè)部分是提取指定的輪廓,第二個(gè)部分通過(guò)對(duì)比實(shí)現(xiàn)劃痕檢測(cè)與缺角檢測(cè)。本次主要搞定第一部分,學(xué)會(huì)觀察圖像與提取圖像ROI對(duì)象輪廓外接矩形與輪廓。
下面是基于二值圖像分析的大致流程
- 讀取圖像
- 將圖像轉(zhuǎn)換為灰度圖,并對(duì)其進(jìn)行二值化處理。
# 圖像二值化
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV |
- 進(jìn)行形態(tài)學(xué)開(kāi)運(yùn)算以去除噪聲和平滑圖像。
cv.THRESH_OTSU)
# 形態(tài)學(xué)開(kāi)運(yùn)算去除噪聲和平滑圖像
se = cv.getStructuringElement(cv.MORPH_RECT, (3, 3), (-1, -1))
binary = cv.morphologyEx(binary, cv.MORPH_OPEN, se)
cv.imshow("binary", binary)
- 提取圖像中的輪廓。
# 提取圖像中的輪廓
contours, hierarchy = cv.findContours(binary, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)
- 針對(duì)每個(gè)輪廓,計(jì)算其外接矩形,并根據(jù)一些條件繪制矩形和輪廓。
height, width = src.shape[:2]
for c in range(len(contours)):
x, y, w, h = cv.boundingRect(contours[c])
area = cv.contourArea(contours[c])
# 根據(jù)條件過(guò)濾不符合要求的輪廓
if h > (height//2):
continue
if area < 150:
continue
cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 1, 8, 0)
cv.drawContours(src, contours, c, (0, 255, 0), 2, 8)
整理示例:檢測(cè)圖片中的缺陷并將缺陷框選出來(lái)
原圖:
代碼如下:
import cv2 as cv
src = cv.imread("que01.jpg")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
# 圖像二值化
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
# 形態(tài)學(xué)開(kāi)運(yùn)算去除噪聲和平滑圖像
se = cv.getStructuringElement(cv.MORPH_RECT, (3, 3), (-1, -1))
binary = cv.morphologyEx(binary, cv.MORPH_OPEN, se)
cv.imshow("binary", binary)
# 提取圖像中的輪廓
contours, hierarchy = cv.findContours(binary, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)
height, width = src.shape[:2]
for c in range(len(contours)):
x, y, w, h = cv.boundingRect(contours[c])
area = cv.contourArea(contours[c])
# 根據(jù)條件過(guò)濾不符合要求的輪廓
if h > (height//2):
continue
if area < 150:
continue
cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 1, 8, 0)
cv.drawContours(src, contours, c, (0, 255, 0), 2, 8)
cv.imshow("result", src)
cv.imwrite("binary2.png", src)
cv.waitKey(0)
cv.destroyAllWindows()
運(yùn)行結(jié)果如下:
示例2:
原圖:
修改上面的圖片路徑地址運(yùn)行看效果
對(duì)于明顯的缺陷檢測(cè)還是可以的,但是實(shí)際生產(chǎn)的缺陷肯定不是這么明顯的,如下圖:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-682519.html
后續(xù)講解這類的缺陷該如何檢測(cè),敬請(qǐng)期待?。。。?span toymoban-style="hidden">文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-682519.html
到了這里,關(guān)于opencv 案例05-基于二值圖像分析(簡(jiǎn)單缺陷檢測(cè))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!