python - 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
在函数声明的开头添加,也会抛出错误。有任何想法吗?
解决方案
我可以看到您的情况有两种主要可能性
1)这类问题主要取决于opencv-python-contrib
模块。如果您不使用该contrib
部件,则跟踪器对象不包含在opencv-python
其中。
2)如果你有opencv-python-contrib
你可能会遇到一种与主要功能和contrib
功能的版本不匹配。
我的建议是检查这些在您的系统上是否有效。
推荐阅读
- nginx - 使用 ssl 证书与其他机器传递请求
- javascript - 需要以秒为单位找到两个日期之间的差异
- python - 如何使用 OpenCV cv2.morphologyEx 过滤特定大小的形状
- python - Pandas - 使用数据框中的单词匹配检查数据分类
- javascript - Nodejs mssql批量插入RequestError:无效的对象名称'table_name'
- ruby-on-rails - 在日志中包含 Active Record 查询的角色
- javascript - Discord.js 使用来自 json 文件的数据嵌入消息
- linux - 如果服务器 B 连接到 PostgreSQL,我如何在服务器 A 上执行 psql 命令
- scala - 尽管方法 uoverloading 起到了相同的作用,但为什么将匹配类型添加到 scala3 中?
- azure - 登录时收不到验证码,是否有 Telegram Channel Access Token 的测试数据?