文章目錄
- 聲明
- 正文
-
- 1.明确任務
- 2.需要用到的函數
- 3.完整代碼
- 4.另外
- 感謝觀看!
聲明
聲明:本系列部落格是我在學習OpenCV官方教程中文版(For Python)(段力輝 譯)所做的筆記。是以,其中的絕大部分内容引自這本書,部落格中的代碼也是其配套所附帶的代碼或書中的代碼,侵删。其中部分代碼可能會因需要而改動。在本系列部落格中,其中包含書中的引用,也包括我自己對知識的了解,思考和總結。本系列部落格的目的主要有兩個,一個是可以作為我自己的學習筆記,時常複習鞏固。第二個是可以為想學習python下的opencv 3 相關知識的朋友提供一些參考。
正文
1.明确任務
利用opencv知識,通過攝像頭錄像,實時提取帶有某個特定顔色的物體,進而實作物體跟蹤。
2.需要用到的函數
-
cv2.VideoCapture(0)
這個函數用來捕獲視訊,VideoCapture()中參數是0,表示打開筆記本的内置攝像頭,參數是視訊檔案路徑則打開視訊。,記得最後要用cap.release()來關閉攝像頭。
-
ret,frame=cap.read()
cap.read()按幀讀取視訊,ret,frame是cap.read()方法的兩個傳回值。其中ret是布爾值,如果讀取幀是正确的則傳回True,如果檔案讀取到結尾,它的傳回值就為False。frame就是每一幀的圖像,是個三維矩陣。
-
cv2.cvtColor(image,flag)
這個函數是一個顔色空間轉換函數,flag代表轉換方式。
-
cv2.inRange()
括号裡有三個參數,依次是hsv,lower,upper,第一個參數:hsv指的是原圖,第二個參數:lower指的是圖像中低于這個lower的值,圖像值變為0,第三個參數:upperd指的是圖像中高于這個upper_red的值,圖像值變為0,而在lower~upper之間的值變成255。
-
cv2.bitwise_and()
bitwise_and()是對二進制資料進行“與”操作,即對圖像(灰階圖像或彩色圖像均可)每個像素值進行二進制“與”操作,1&1=1,1&0=0,0&1=0,0&0=0
3.完整代碼
import cv2
import numpy as np
cap=cv2.VideoCapture(0)
while(1):
# 擷取每一幀
ret,frame=cap.read()
# 轉換到 HSV
hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
# 設定顔色的門檻值
lower_red=np.array([0,43,46])
upper_red=np.array([10,255,255])
# 根據門檻值建構掩模
mask=cv2.inRange(hsv,lower_red,upper_red)
# 對原圖像和掩模進行位運算
res=cv2.bitwise_and(frame,frame,mask=mask)
# 顯示圖像
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k=cv2.waitKey(5)&0xFF
if k==27:
break
cap.release() #關閉攝像頭
# 關閉視窗
cv2.destroyAllWindows()
運作結果:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2csETUE9ENFpmTzEleYhnRzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuITO2IDOzcTMxATOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
(當時截圖時沒截好,是以原始圖檔與前兩張不一樣,但差不多意思就是拿了一瓶旺仔牛奶)
4.另外
怎樣找到要跟蹤對象的 HSV 值?
隻需要以下代碼就可以輕松獲得你需要的HSV值:
import cv2
import numpy as np
#假設我們想得到綠色的HSV值
green=np.uint8([[[0,255,0]]])#注意:是RGB,而不是BGR,還有這裡是三層括号
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print(hsv_green)
運作結果:
得到這個值後,現在你可以分别用 [H-100,100,100] 和 [H+100,255,255] 做上下門檻值。
感謝觀看!
如有錯誤,歡迎批評指正!