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

运行prouast/heartbeat项目时遇OpenCV Assertion failed错误求助

解决OpenCV光流计算断言失败错误

错误本质

你遇到的cv::Exception是因为光流计算函数calcOpticalFlowPyrLK收到了空的特征点集合,或者特征点格式不符合要求(不是2通道32位浮点型)。日志里的(npoints = prevPtsMat.checkVector(2, CV_32F, true)) >=0断言明确了这一点。

针对性解决步骤

1. 修复OpenCV版本冲突

你的pip安装的是4.7.0.72,但错误日志显示调用的是4.5.1版本,说明系统预编译的OpenCV和pip包存在冲突。执行以下操作:

# 卸载系统自带的OpenCV库
sudo apt purge libopencv*
sudo apt autoremove
# 强制重新安装指定版本的pip包
pip install --force-reinstall opencv-python-headless opencv-contrib-python==4.7.0.72

2. 确保特征点检测有效

项目依赖特征点跟踪计算心率,如果视频中未检测到足够特征点,就会触发该错误:

  • 确认视频中人脸清晰、光线充足,避免过暗/过曝场景;
  • 修改项目中特征点检测参数(比如goodFeaturesToTrack的maxCorners调大、minDistance调小),保证每帧能检测到至少几个特征点;
  • 在代码中增加判断逻辑:如果检测到的特征点数量为0,跳过当前帧或重新初始化检测,不要将空集合传入光流函数。

3. 适配树莓派3B硬件性能

树莓派3B算力有限,高分辨率/帧率视频可能导致处理不及时,引发特征点检测失败:

  • 将视频分辨率降低至320x240左右,减少每帧计算量;
  • 把视频帧率降到15fps,给特征点检测和光流计算留出足够处理时间;
  • 确保代码中使用灰度图进行特征检测和光流计算(比彩色图运算效率高很多)。

4. 修复视频格式/编码问题

如果视频编码损坏或格式不兼容,可能导致帧读取异常,间接引发特征点检测失败。用ffmpeg重新转码:

ffmpeg -i 你的输入视频.mp4 -vf scale=320:240 -r 15 -c:v libx264 -crf 23 转码后的视频.mp4

使用转码后的视频重新测试。

内容的提问来源于stack exchange,提问作者Gordon Freeman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:13:08