機器視覺第六次實驗
一、實驗目的
通過OpenCV第六次進行實驗,對圖片進行寬度測量。
二、實驗內容
對圖片進行寬度測量。
三、實驗過程
我使用的是python語言+openCV對圖片進行寬度測量的功能。
1)讀取圖片
使用imread()函數讀取圖片,使用imshow()函數顯示圖片,waitKey()函數含義為按下任意鍵繼續;
代碼實例:
img = cv2.imread("img1.png")
cv2.imshow("img",img)
cv2.waitKey(0)
圖3.1讀取的圖片
2)截取測量區域
實例代碼:
#截取目標區域
recimg = img[80:236, 120:238]
cv2.imshow("img",recimg)
cv2.waitKey()
圖3.2截取的測量區域
3)二值化處理
使用threshold()函數進行圖片反色:
實例代碼:
#二值化處理
ret, th = cv2.threshold(recimg, 80, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("img",th)
cv2.waitKey()
圖3.3二值化處理圖
4)邊緣檢測、圖像反色
輸入的代碼:
# 邊緣檢測、圖片反色
img1 = cv2.Canny(recimg, 100, 200)
img1 = 255 - cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
img2 = cv2.cvtColor(255 - th, cv2.COLOR_RGB2GRAY)
cv2.imshow("img",img2)
cv2.waitKey()
圖3.4反色后得到的圖片
5)邊緣檢測,框出物體的輪廓
實例代碼:
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
x, y, w, h = cv2.boundingRect(cnt)
6)繪制直線
實例代碼:
# 繪制直線
cv2.line(img1, (x, y), (x + w, y), (0,255,0), 3, 5)
cv2.line(img1, (x, y+h), (x + w, y+h), (0, 255, 0), 3, 5)
img[80:236, 120:238] = img1
7)圖片上添加寬度大小
實例代碼:
cv2.putText(img,'width:'+str(w),(10,30),cv2.FONT_HERSHEY_COMPLEX,1,(0,0,255),1)
圖3.5寬度測量圖
四、實驗中的錯誤
1)寬度測量的值需要寫入圖片,開始代碼如下:
cv2.putText(img,'width:'+str(w),(10,30),font,1,(0,0,255),1)一直報如下錯:
圖4.1寫入文字報錯
解決方案:將font 修改為以下代碼:cv2.FONT_HERSHEY_COMPLEX
圖4.2解決填入寬度問題
2)我們需要一步步實驗在圖片上的最佳位置填入文字和寬度。
五、實驗總結
學習了OpenCV的寬度測量,遇到了作業問題自己解決了,鍛煉了自己的能力。