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

运行OpenCV Lucas Kanade光流代码出现Assertion Failed报错如何解决

OpenCV Lucas-Kanade光流calc断言报错解决方案

报错信息:error: OpenCV(4.1.2) /io/opencv/modules/video/src/lkpyramid.cpp:1250: error: (-215:Assertion failed) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function 'calc'

该报错核心原因为传入cv.calcOpticalFlowPyrLK()的前序特征点参数prevPts不符合接口要求,可按以下步骤逐一排查修复:

  • 校验特征点检测返回结果,避免传入空数组
    goodFeaturesToTrack在当前帧无符合阈值的角点时会返回空值,需提前加判断逻辑拦截:
corners = cv.goodFeaturesToTrack(old_gray, mask=None, **feature_params)
if corners is None or len(corners) == 0:
    # 无有效角点时跳过当前帧或调低检测阈值重试
    continue
  • 保留特征点的维度结构,不要修改默认返回的三维格式
    goodFeaturesToTrack默认返回维度为(N,1,2)的数组,转换float32时不要随意降维,保留原始结构即可:
# 正确写法,保留(N,1,2)维度
prevPts = corners.astype(np.float32)

# 错误写法,降维到(N,2)会触发格式校验失败
# prevPts = corners.reshape(-1,2).astype(np.float32)
  • 校验输入帧格式合法性
    光流计算要求输入前后帧均为单通道灰度图,避免直接传入三通道BGR图:
old_gray = cv.cvtColor(old_frame, cv.COLOR_BGR2GRAY)
new_gray = cv.cvtColor(new_frame, cv.COLOR_BGR2GRAY)
  • 调整角点检测阈值,保证能获取有效特征点
    若频繁出现空角点返回,调低goodFeaturesToTrack的qualityLevel参数(如从0.3调整到0.1),缩小minDistance参数,提升角点检出数量。
  • 校验帧读取有效性
    如果是从视频文件/摄像头读取帧数据,先判断读取返回状态,避免拿空帧跑特征检测:
ret, frame = cap.read()
if not ret:
    break

内容的提问来源于stack exchange,提问作者Anshuman Srivastava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:39:03