機器視覺缺陷檢測實驗
一、實驗目的
(1)利用python編寫程序實現對圖像的缺陷檢測;
(2)通過輪廓對比檢測出合格產品與不合格產品;
(3)實現在圖像上顯示文本提示信息;
二、題目描述
(1)讀取標准圖像並顯示;
(2)利用for循環讀取待測的對比圖像;
(3)將標准圖像與一張待測圖像進行中值濾波、圖像差分、灰度化處理、輪廓提取、最后提取輪廓總數;
(4)將合格產品的輪廓數進行提煉,采用if語句利用輪廓數判斷待測圖像是否合格;
(5)在合格圖像上顯示“合格”字樣的提示信息,不合格則在相應圖像上顯示“不合格”。
三、實現過程及運行效果
實驗標准圖像如下:
圖3.1標准圖像
實驗步驟:
(1)讀取標准圖像並利用for循環讀取待測的對比圖像;
(2)將標准圖像與一張待測圖像進行中值濾波、圖像差分、灰度化處理、輪廓提取、最后提取輪廓總數;
代碼實例:
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
minThres = 6
# 讀取圖像1
img=cv2.imread('0.bmp')#讀取標准圖像
cv2.imshow('YuanTu',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
for i in range(1,6):
imgi=cv2.imread('{}.bmp'.format(i))#依次讀取待測圖像
#中值濾波
img1 = cv2.medianBlur(img,15)
# 圖像差分
diff = cv2.absdiff(img1, imgi)
#灰度圖
gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
# 二值化
_,thres = cv2.threshold(gray,minThres,255,cv2.THRESH_BINARY)
# 查找輪廓
contours,hierarchy = cv2.findContours(thres, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
(3)將合格產品的輪廓數進行提煉,采用if語句利用輪廓數判斷待測圖像是否合格;
代碼實例:
if len(contours)>1000:
print('合格')
else:
Print(‘不合格’)
(4)在合格圖像上顯示“合格”字樣的提示信息,不合格則在相應圖像上顯示“不合格”。
代碼實例:
if len(contours)>1000:
print('合格')
#在圖像上顯示是否合格
src1 = Image.fromarray(cv2.cvtColor(imgi, cv2.COLOR_BGR2RGB))
font = ImageFont.truetype('simsun.ttc', 30)
# 文字輸出位置
position = (5,5)
# 輸出內容
str = '合格'
draw = ImageDraw.Draw(src1)
draw.text(position, str, font=font, fill=(255, 0, 0))
src1 = cv2.cvtColor(np.asarray(src1), cv2.COLOR_RGB2BGR)
cv2.imshow("CeShi",src1)
cv2.waitKey(0)
else:
print('不合格')
#在圖像上顯示是否合格
src2 = Image.fromarray(cv2.cvtColor(imgi, cv2.COLOR_BGR2RGB))
font = ImageFont.truetype('simsun.ttc', 30)
# 文字輸出位置
position = (5,5)
# 輸出內容
str = '不合格'
draw = ImageDraw.Draw(src2)
draw.text(position, str, font=font, fill=(255, 0, 0))
src2 = cv2.cvtColor(np.asarray(src2), cv2.COLOR_RGB2BGR)
cv2.imshow("CeShi",src2)
cv2.waitKey(0)
圖3.4.1檢測結果圖
圖3.4.2檢測結果圖
圖3.4.3檢測結果圖
四、問題及解決方法
(1)剛開始自己想的是將兩張灰度圖利用equals()函數進行比對看能否通過,結果不難想象確實太天真,這錯誤很低級了,數據類型都沒分清楚的;
(2)在網上查找資料一直找不到怎么直接對兩張圖像進行缺陷檢測比對,只有一個差分檢測;
(3)有找到一個關於差異檢測的相關資料可是發現其中一個SIF算法被申請了專利不能使用;
(4)最后通過仔細研讀了一個博主的代碼,幾次運行測試發現了輪廓數可以作為判斷依據來實現我的目的,所以大膽采用了這一方法,成功實現了本次實驗。
五、實驗總結
本次實驗讓我感覺機器視覺實驗越來越上升了難度,同時發現老師的高科技實驗軟件太厲害了,簡單方便,科技的力量。本次實驗花費了我足足一天的時間才勉強完成任務,之后應該還有一次更加困難的挑戰,沒有撤退可言唯有迎難而上。