运行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
相关产品推荐
相关产品推荐

