我正在尝试使用录制的视频跟踪python中的opencv对象。我希望在每个可见对象出现时给它一个唯一的对象。例如,一个对象进入屏幕并获得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
答案 0 :(得分:1)
您想要追踪什么样的物品?如果很容易区分它们,您可以尝试收集对象的某些功能,并检查具有相似功能的对象是否更早出现。在您的情况下,很难说哪种功能最好,但您可以尝试以下方法:
其他解决方案是使用为此类任务设计的更强大的工具 - 对象跟踪器。在我的一个项目中,我正在使用TLD tracker并且它工作正常,另一种选择是使用CMT tracker,这可能对你更好,因为它是用Python编写的。请注意,对于跟踪多个对象,您将需要多个跟踪器对象(或找到能够跟踪多个不同对象的跟踪器)。