首页 > 解决方案 > OpenCV 错误:在跟踪器对象上调用更新方法时断言失败

问题描述

我正在遍历视频剪辑中的帧并在每个帧上运行一个 OpenCV 跟踪器对象。整个跟踪过程应运行多次 - 每次将视频大小调整为新的帧宽度。

该过程第一次正确运行。一旦第二次迭代开始(与以前相同的跟踪步骤,但调整帧大小),OpenCV 会抛出此错误:

错误:OpenCV(4.1.0)/Users/travis/build/skvark/opencv-python/opencv/modules/video/src/lkpyramid.cpp:1363:错误:(-215:断言失败)prevPyr [level * lvlStep1] .size() == nextPyr[level * lvlStep2].size() in function 'calc'

整个脚本太长,无法在这里发布,所以这里是要点:

widths = [0, 1280, 640]

for width in widths:
    # call tracking function
    run_track(width)

def run_track(width):
    # Initialize the video stream and pointer to output video file
    vs = cv2.VideoCapture(video_file)

    # run until no more frames
    while True:
        grabbed, frame = vs.read()

        if resize is not 0:
            frame = imutils.resize(frame, width)

        if tracker is None:
            tracker = tracker_inst

            tracker.init(frame, tuple(gt_bb))

        if tracker is not None:
            tracking, trk_bb = tracker.update(frame)

            # do custom tracking procedure, save frames, etc

不管第一个值widths是什么,它第一次运行良好。一旦对 中的第二个值开始迭代widths,就会引发错误。是参考问题吗?即使我frame = None在函数声明的开头添加,也会抛出错误。有任何想法吗?

标签: pythonpython-3.xopencv

解决方案


我可以看到您的情况有两种主要可能性

1)这类问题主要取决于opencv-python-contrib模块。如果您不使用该contrib部件,则跟踪器对象不包含在opencv-python其中。

2)如果你有opencv-python-contrib你可能会遇到一种与主要功能和contrib功能的版本不匹配。

我的建议是检查这些在您的系统上是否有效。


推荐阅读