天天看點

OpenCV 物體跟蹤聲明正文感謝觀看!

文章目錄

  • 聲明
  • 正文
    • 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()
           

運作結果:

OpenCV 物體跟蹤聲明正文感謝觀看!
OpenCV 物體跟蹤聲明正文感謝觀看!
OpenCV 物體跟蹤聲明正文感謝觀看!

(當時截圖時沒截好,是以原始圖檔與前兩張不一樣,但差不多意思就是拿了一瓶旺仔牛奶)

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] 做上下門檻值。

感謝觀看!

如有錯誤,歡迎批評指正!

繼續閱讀