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