【发布时间】:2015-04-09 01:52:11
【问题描述】:
我正在尝试使用 python 中的 opencv 从录制的视频中跟踪对象。我想在每个可见对象出现时为其赋予一个唯一的对象 nr。例如,一个对象进入屏幕并获得 nr1,然后第二个加入第一个并获得 nr2,然后第一个对象离开屏幕但第二个对象仍然可见并且仍然获得对象 nr2 而不是 1(是唯一的对象)。我在网上找不到有关如何执行此操作的任何信息。任何帮助(包括代码)表示赞赏。
到目前为止我编写的用于获取轮廓和绘制对象编号的代码:
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
【问题讨论】:
-
您是否考虑过保留对对象旧(即前一帧)质心位置的引用,并将新检测到的对象的位置与那些旧引用进行比较?
-
是的,我有。我现在确实能够按可见的顺序保持对象,但是当 obj1 进入屏幕然后 obj2 进入并离开并且 obj3 进入和离开时,它仍然得到名称 obj2。我想我可能能够在几个小时内编写此代码,但我认为必须有一个更简单的解决方案。感谢您的建议。
标签: python opencv tracking contour