2015-02-09 135 views
0

我想從錄製的視頻跟蹤python中的opencv對象。我想給出每個可見對象的唯一對象nr。例如,一個對象進入屏幕並獲取nr1,然後第二個連接第一個並獲得nr2,然後第一個對象離開屏幕,但第二個仍然可見,仍然獲得對象nr2而不是1(作爲唯一對象)。我找不到有關如何在線執行此操作的任何信息。任何幫助(包括代碼)表示讚賞。如何跟蹤opencv python中的不同輪廓

到目前爲止,我已經寫了越來越輪廓和繪圖對象號碼代碼:

cap = cv2.VideoCapture("video.mov") 
while True: 
    flag, frame = cap.read() 
    cv2.drawContours(frame, contours, -1, (255,0,0) ,1) 
    for i in range(len(contours)): 
     cnt = contours[i] 
     cnt_nr = i+1 
     x,y,w,h = cv2.boundingRect(cnt) 
     cv2.putText(frame, str(cnt_nr), ((x+w)/2,(y+h)/2), cv2.FONT_HERSHEY_PLAIN, 1.8, (0,0,0)) 
    cv2.imshow("Tracked frame",frame) 
    k = cv2.waitKey(0) 
    if k == 27: 
     cv2.destroyAllWindows() 
     break 
+0

您是否考慮過保留對舊對象(即前一幀)質心位置的引用,並將新檢測到的對象的位置與那些較舊的引用進行比較? – 2015-02-09 18:08:15

+0

是的,我有。我現在確實能夠保持對象的可見性,但是當obj1進入屏幕,然後obj2進入和離開並且obj3進入和離開時,它仍然獲得名稱obj2。我想我可能能夠在幾個小時內對其進行編碼,但我認爲必須有一個更簡單的解決方案。感謝您的建議。 – crazjo 2015-02-09 21:33:01

回答

1

你想跟蹤什麼樣的對象?如果很容易區分它們,您可以嘗試收集某些對象的特徵,並檢查具有相似特徵的對象是否較早出現。這是很難說什麼樣的特點將是您的情況最好的,但你可以嘗試以下操作:

  • 外形尺寸,面積和長度(或比:面積/長度或其他一些)
  • convex hull對象,並將其長度(與上述相同 - 你可能嘗試比率以及)
  • 對象的顏色(平均顏色) - 如果照明可以改變考慮僅使用H信道從HSV色空間
  • 一些更復雜的 - 的「總和」對象內部的邊緣(在對象上使用邊緣檢測器,只計算結果圖像的總和)

其他解決方案是使用更強大的工具設計用於這種任務 - 對象跟蹤器。在我使用TLD tracker的其中一個項目中,它的工作正常,另一種選擇是使用CMT tracker,這對您可能會更好,因爲它是用Python編寫的。請注意,爲了跟蹤多個對象,您需要多個跟蹤器對象(或查找能夠跟蹤多個不同對象的跟蹤器)。