gpt4 book ai didi

python - 如何在opencv python中跟踪不同的轮廓

转载 作者:行者123 更新时间:2023-12-02 17:48:52 25 4
gpt4 key购买 nike

我正在尝试从录制的视频中使用 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

最佳答案

您要跟踪什么样的对象?如果很容易区分,可以尝试收集对象的一些特征,并检查具有相似特征的对象是否较早出现。很难说哪种功能最适合您的情况,但您可以尝试以下操作:

  • 轮廓大小、面积和长度(或比率:面积/长度或其他)
  • convex hull对象的长度及其长度(与上面相同 - 您也可以尝试比率)
  • 对象颜色(平均颜色) - 如果光照可以改变,请考虑仅使用 HSV 颜色空间中的 H channel
  • 一些更复杂的 - 对象内部边缘的“总和”(在对象上使用一些边缘检测器,只计算结果图像的总和)

  • 其他解决方案是使用为此类任务设计的更强大的工具 - 对象跟踪器。在我的一个项目中,我正在使用 TLD tracker它工作正常,另一种选择是使用 CMT tracker ,这可能对您更好,因为它是用 Python 编写的。请注意,要跟踪多个对象,您将需要多个跟踪器对象(或找到能够跟踪多个不同对象的跟踪器)。

    关于python - 如何在opencv python中跟踪不同的轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407828/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com