1. 程式人生 > >python+OpenCV實現動態物體追蹤

python+OpenCV實現動態物體追蹤

一、安裝openCV

(就踩到了很多坑= =)

從以下部落格中獲得了很多幫助:

https://blog.csdn.net/u010105243/article/details/72026772

https://blog.csdn.net/u010128736/article/details/52713204

安就安了一晚上。。兩個小時還沒裝好。。壯士

第二天關機再開發現就可以了 可能配置環境需要重啟電腦

二、需求分析

幫同學寫作業系列- -他的老師丟給他一個 識別視訊中移動物體並把背景變成黑色 的作業。。

然後就來找我 感覺挺有意思的 以前也聽說過opencv 沒用過 遂接受 0.0反正寫出來了他也不會發現我是一個弱雞hhh

一開始想到pillow庫,搜尋了一下發現了moviepy庫,可以編輯視訊,但不能動態追蹤

最後發現了完美契合需求的OpenCV庫~

三、一些真正有用的學習部落格:

https://blog.csdn.net/jqw11/article/details/73826014

https://blog.csdn.net/huanglu_thu13/article/details/52346578

https://blog.csdn.net/dcrmg/article/details/78817660

http://blog.topspeedsnail.com/archives/2112

http://python.jobbole.com/81593/

學了一下OpenCV的基本操作就開始上手了,不過也不是很容易,用到的函式比較多,還有HSV么蛾子

遇到了一個bug:python opencv error:scn ==3||scn ==4 in function cv::cvtColor

試了很多次也沒有解決了。。好在不影響視訊播放

貼一下完整程式碼:

import cv2
import numpy as np

#讀取視訊
cap = cv2.VideoCapture("C:\\Users\hp\Desktop\python\IMG_4232.qt")

#設定顏色區間
#白色:0 0 221,180 30 255
#藍色:100 43 46,124 255 255
lower_white = np.array([78,25,221])
upper_white = np.array([125,99,255])

while(cap!=0):
    #讀取視訊到frame中,顏色識別方式轉換成HSV
    ret, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    #顯示原來的視訊
    cv2.namedWindow('frame', cv2.WINDOW_FULLSCREEN)
    cv2.imshow('frame', frame)

    #提取視訊中白色的部分
    mask = cv2.inRange(hsv, lower_white, upper_white)
    cv2.namedWindow('mask', cv2.WINDOW_FULLSCREEN)
    cv2.imshow('Mask', mask)

    #原視訊和提取後的視訊做與操作
    res = cv2.bitwise_and(frame, frame, mask=mask)
    cv2.namedWindow('res', cv2.WINDOW_FULLSCREEN)
    cv2.imshow('res', res)

    #q鍵退出迴圈
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()