2022-07-11 19:34:20 索煒達(dá)電子 1173
文件編號(hào):A5
文件大小:8M
開發(fā)環(huán)境:Python3.8、OpenCV4.6、Pycharm2020
猿創(chuàng)承諾:該項(xiàng)目親測(cè)正常運(yùn)行,需遠(yuǎn)程調(diào)試部署需另外收費(fèi),確保正常使用,不能正常使用全額退款。
簡(jiǎn)要概述:基于Python+OpenCV瓶口缺陷檢測(cè)
主要任務(wù):判斷瓶口是否完好,尋找瓶口缺陷部分,并將其框出(以下圖為例進(jìn)行演示)(包含程序部分代碼)
解決步驟:
-通過Hough圓檢測(cè),獲取瓶口外側(cè)圓,確定圓的位置和尺寸,對(duì)瓶口部分進(jìn)行極坐標(biāo)變化和極坐標(biāo)反變換,消除瓶口外側(cè)區(qū)域的干擾。
-對(duì)之后的圖像進(jìn)行處理,提取缺陷部分進(jìn)行輪廓繪制和缺陷判別。
1、導(dǎo)入功能包,讀取圖像
2、Hough圓檢測(cè)獲取瓶口位置和大小
為了防止誤判,對(duì)圓半徑進(jìn)行限制,保證獲得瓶口最外側(cè)的輪廓./bottle_create.py 對(duì)框中瓶子進(jìn)行檢查
****************************************************************************************************
'''hough圓變換'''
cimg = cv2.cvtColor(bottle,cv2.COLOR_GRAY2BGR) # 轉(zhuǎn)換成彩色圖
circles = cv2.HoughCircles(median,cv2.HOUGH_GRADIENT,1,100,
param1=100,param2=60,minRadius=150,maxRadius=160) # Hough圓檢測(cè)
circles = np.uint16(np.around(circles))
#print(circles)
for i in circles[0,:]: # 遍歷circles,i為列表,i中包含多個(gè)列表,列表為[x,y,r]圓心坐標(biāo)和半徑
# draw the outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
# draw the center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
#cv_show( 'cimg',cimg)
****************************************************************************************************
3、極坐標(biāo)變化與反變換
為了消除瓶口外側(cè)部分帶來的干擾。進(jìn)行極坐標(biāo)變換,將極坐標(biāo)中心設(shè)為圓心,極半徑為圓半徑;進(jìn)行反變化,將瓶口放在原圖大小的原位置
****************************************************************************************************
'''極坐標(biāo)變換'''
polarImg = cv2.warpPolar(bottle,(300,900),center,radius,
cv2.INTER_LINEAR + cv2.WARP_POLAR_LINEAR)
#cv_show('polarImg',polarImg)
'''反變換'''
b_bottle=cv2.warpPolar(polarImg,psp, center,radius,
cv2.INTER_LINEAR + cv2.WARP_POLAR_LINEAR + cv2.WARP_INVERSE_MAP)
#cv_show('b_bottle',b_bottle)
****************************************************************************************************
4、圖像處理
通過均值濾波消除干擾,閾值變換檢測(cè)瓶口的亮點(diǎn),由于出現(xiàn)小白點(diǎn)的干擾,進(jìn)行開運(yùn)算處理,再進(jìn)行膨脹,將缺陷區(qū)域聯(lián)通
5、輪廓檢測(cè)和缺陷判斷
尋找上圖的外接輪廓,遍歷這些輪廓,判斷是否在瓶口處,并將其在原圖上畫出;將缺陷記錄,判斷存在缺陷,在圖片上顯示NOT OK
****************************************************************************************************
'''找缺陷'''
contours,hierarchy = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) #尋找輪廓
s_bottle=cv2.cvtColor(bottle, cv2.COLOR_GRAY2BGR)
counts=[]
for cnt in contours:
(x, y, w, h) = cv2.boundingRect(cnt) #獲取輪廓位置大小
# print(x, y, w, h)
if x>circles_x1 and x<circles_x2 and y>circles_y1 and y<circles_y2 and (w>5 or h>5): # 判斷輪廓是否在瓶口處
cv2.drawContours(s_bottle,cnt,-1,(0,0,255),2) # 繪制輪廓
counts.append(cnt) # 記錄缺陷
****************************************************************************************************
以上就是瓶口缺陷檢測(cè)的全部過程,其中還有不足,還達(dá)不到100%的成功
放上原圖和最后做完的效果
按需寫作:
演示視頻:
點(diǎn)擊查看:系統(tǒng)演示視頻
運(yùn)行效果:
源代碼
./bottle_create.py 對(duì)框中瓶子進(jìn)行檢查
./bottle_mouth.py 對(duì)瓶口缺陷進(jìn)行檢測(cè)
源文件
./bottles 檢測(cè)的原圖像
./bottle 檢測(cè)完的圖像
遠(yuǎn)程協(xié)助:
溫馨提示:索煒達(dá).猿創(chuàng)官方提供收費(fèi)遠(yuǎn)程協(xié)助,確保您項(xiàng)目運(yùn)行成功。
點(diǎn)擊查看:遠(yuǎn)程協(xié)助相關(guān)事項(xiàng)
我們提供完整項(xiàng)目文件清單如下:
文件目錄
├ 1.項(xiàng)目源碼
├ 2.運(yùn)行截圖
└ 3.演示視頻