Python+OpenCV學習(13)---meanshift目標跟蹤
阿新 • • 發佈:2019-02-06
利用python學習OpenCV,個人感覺比較方便。函式的形式與C++基本相同,所以切換過來還是比較好的,對於像我這種對python不太熟練的人,使用python的整合開發環境PyCharm進行學習,可以設定斷點除錯,有助於我這類初學者理解掌握。
下面是利用python語言結合OpenCV進行meanshift目標跟蹤的程式碼:
# -*- coding:utf-8 -*- __author__ = 'Microcosm' import cv2 import numpy as np cap = cv2.VideoCapture("E:/python/Python Project/opencv_showimage/videos/visionface.avi") # 獲取第一幀 ret,frame = cap.read() print frame.shape # 設定初始跟蹤物件的視窗大小 #r,h,c,w = 120,100,253,100 r,h,c,w = 180,80,140,90 track_window = (c,r,w,h) cv2.rectangle(frame,(c,r),(c+w,r+h),255,2) cv2.imshow("frame",frame) cv2.waitKey(0) # 設定感興趣的區域 roi = frame[r:r+h,c:c+w] #cv2.imshow("roi",roi) #cv2.waitKey(0) hsv_roi = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv_roi, np.array((0.,0.,32.)), np.array((180.,255.,255.))) roi_hist = cv2.calcHist([hsv_roi],[0],None,[180],[0,180 ]) cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX) term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1) while(True): ret, frame = cap.read() if ret is True: hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) dst = cv2.calcBackProject([hsv],[0],roi_hist,[0,180],1) # 呼叫meanshift獲取新的位置 ret,track_window = cv2.meanShift(dst,track_window,term_crit) # 畫出它的位置 x,y,w,h = track_window cv2.rectangle(frame,(x,y),(x+w,y+h),255,2) cv2.imshow("frame",frame) k = cv2.waitKey(60) & 0xff if k == 27: break #else: # cv2.imwrite(chr(k)+".jpg",frame) else: break cv2.destroyAllWindows() cap.release()
跟蹤結果有問題,引數沒設定好。下面是前3張圖片的結果: