C++ solvePnP函数 ( (npoints >= 4) || (npoints == 3 && flags == SOLVEPNP_ITERATIVE && useExtrinsic报错

问题:

今天在进行RM的装甲板PnP解算时,调用solvePnP函数会报错,如图
报错信息

terminate called after throwing an instance of 'cv::Exception’what(): OpenCV(4.4.0) /home/bozhi/Desktop/opencv-4.4.0/modules /calib3d/src/solvepnp.cpp:753: error: (-215:Assertion failed) ( (npoints >= 4) || (npoints == 3 && flags == SOLVEPNP_ITERATIVE && useExtrinsicGuess) ) && NPOINTS == std::max(ipoints.checkVector(2, CV_32F), ipoints.checkVector(2, CV_64F)) in function ‘solvePnPGeneric’

Abort ed (core dumped)

    solvePnP(obj,pnts,cam,dis,rVec,tVec);//调用函数

解决方法:

我的程序报错的一个特殊点在于,调用的视频播放一会儿后忽然报错,打开的imshow窗口也就关掉了。
当我逐帧查看后,发现报错前最后一帧的imshow窗口识别出了两个装甲板,因此存储”图像坐标“的vector(也就是语句中的pnts)有八个点,超维了。
于是更改pnts.clear()语句的位置后,即可正常运行。

反思:

在网上查了好久资料,大部分资料是说定义的vector数据类型有误而非超了点数量。哎,粗心的逻辑错误是程序设计的一个大问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值