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()