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

ROS项目Python转C++:OpenCV findHomography断言失败问题

ROS机器人校准C++代码findHomography断言失败排查

错误核心原因

报错(-215:Assertion failed) src.checkVector(2) == dst.checkVector(2)直接说明:输入的源点集与目标点集不满足「点数相等且均为2维坐标」的要求。

具体排查方向

1. 验证点集数量一致性

  • 对比Python与C++代码读取calibration.json后,src_points和dst_points的元素数量是否完全一致。
  • 检查C的JSON解析逻辑:确保从JSON的src和dst字段中读取到的点是一一对应的,没有漏读、重复读取或解析错误(比如JSON结构中某组点格式异常,导致C解析时跳过该点)。

2. 检查点的维度与数据类型

  • OpenCV要求输入点为2维浮点型:
    • 若用std::vector<cv::Point2f>存储点,需确保每个Point2f的x和y都被正确赋值,无未初始化的无效点;
    • 若用cv::Mat存储,需保证Mat的通道数为2、行数等于点数、数据类型为CV_32F或CV_64F。
  • 对比Python代码的点处理逻辑:Python中np.array(src_points, dtype=np.float32)会自动统一类型和维度,C++需手动复刻该逻辑,避免出现3维点(如误将z坐标传入)或整数类型点。

3. 核对坐标处理逻辑

  • 检查C++中估算参数l和L后的坐标变换代码,是否完全复刻了Python版本的逻辑:
    • 若存在坐标缩放、偏移等操作,需确保操作后点集的点数未被改变,且每个点的x/y坐标均被正确计算。
    • 避免出现因逻辑错误导致某一个点集被意外截断或扩充的情况。

4. 验证findHomography参数传递

  • C++中调用cv::findHomography时:
    • 若传入std::vector<cv::Point2f>,需保证两个vector的size()完全相等;
    • 若传入cv::Mat,需保证两个Mat的rows相同,且cols=1、channels=2。

常见错误示例

  • JSON解析时误将src的点混入dst集合,导致两个点集点数不匹配;
  • 某组点的y坐标未被正确读取,导致Point2f的y值为随机无效值,触发维度检查失败;
  • 错误使用cv::Point(整数类型)而非cv::Point2f(浮点类型)存储点,导致数据类型不兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:30:08