You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV 4.5.1中使用legacy_MultiTracker实现多目标追踪时出现TypeError错误的求助

解决OpenCV 4.5.1中legacy_MultiTracker添加追踪器的TypeError问题

这个错误的核心原因很明确:你使用的是legacy模块的MultiTracker,但添加的却是普通版本的追踪器,两者的类型不兼容。

在OpenCV 4.x版本中,很多旧版的追踪器API被迁移到了legacy子模块下,cv2.legacy_MultiTracker.create()创建的多追踪器,要求传入的追踪器必须是cv::legacy::Tracker类型的实例,而你用的cv2.TrackerKCF()属于非legacy版本的追踪器,自然会触发类型不匹配的错误。

解决方案

把普通版本的追踪器替换为legacy模块下对应的追踪器即可。对于KCF追踪器,你需要使用cv2.legacy.TrackerKCF_create()来创建实例(不同追踪器的命名规则类似,比如CSRT就是cv2.legacy.TrackerCSRT_create())。

修正后的完整代码

import imutils
import time
import cv2
import numpy as np

trackers = cv2.legacy_MultiTracker.create()
vs = cv2.VideoCapture('4.mp4')

while True:
    frame = vs.read()
    if frame is None:
        break
    frame = frame[1]

    (success, boxes) = trackers.update(frame)

    for box in boxes:
        (x, y, w, h) = [int(v) for v in box]
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    cv2.imshow("Frame", frame)
    key = cv2.waitKey(1) & 0xFF

    if key == ord("s"):
        box = cv2.selectROI("Frame", frame, fromCenter=False, showCrosshair=True)
        print(box)
        # 替换为legacy版本的KCF追踪器
        tracker = cv2.legacy.TrackerKCF_create()
        trackers.add(tracker, frame, box)
    elif key == ord("q"):
        break

vs.release()
cv2.destroyAllWindows()

额外注意事项

  • OpenCV 4.x中,MultiTracker_create()被标记为过时,官方推荐使用cv2.legacy_MultiTracker.create()替代,但必须配套使用legacy模块下的追踪器。
  • 如果你不确定某个追踪器的legacy版本命名,可以通过dir(cv2.legacy)查看所有legacy模块下的可用类和方法,找到对应的追踪器创建函数。

内容的提问来源于stack exchange,提问作者Karthiyayini Naga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 06:27:29