error: (-215:Assertion failed) in function 'solvePnPRansac'

一起做RGBD SLAM(6)(7)中都出现的CV错误及尝试的解决方案

可以cmake和make成功,但是运行时出现以下错误

terminate called after throwing an instance of ‘cv::Exception’
what(): OpenCV(3.4.6) /home/xj/opencv-3.4.6/modules/calib3d/src/solvepnp.cpp:280: error: (-215:Assertion failed) npoints >= 4 && npoints == std::max(ipoints.checkVector(2, CV_32F), ipoints.checkVector(2, CV_64F)) in function ‘solvePnPRansac’

terminate called after throwing an instance of 'cv::Exception' what(): 
OpenCV(3.4.6) /home/xj/opencv-3.4.6/modules/calib3d/src/solvepnp.cpp:280: error: (-215:Assertion failed) npoints >= 4 && npoints == std::max(ipoints.checkVector(2, CV_32F), ipoints.checkVector(2, CV_64F)) in function 'solvePnPRansac'

解决方案

可能原因1:参考

如:slamBase.h中的getDefaultCamera()函数中获取value时的string value = str.substr((pos+1, str.length()))多加了一个括号。
解决:string value = str.substr(pos+1, str.length());

可能原因2:参考

如:漏写函数返回值,运行时异常停止
解决:需仔细检查

可能原因3:参考

运行时刚开始正常,但在处理到某一帧时出现上述错误
亲测是此错误引起:匹配点数目不够导致的程序终止
解决:将parameters.txt中的good_match_threshold的值调大一些(如:从10调到20)
***在尝试解决过程中,也尝试过将end_index的值调整到小于运行出错的那一帧,也可避免此错误,但实际再把end_index调大后仍会出现。

可能原因4:参考

double与float的冲突
将Point3f和Point2f改为:Point3d Point2d。博主未试过,但感觉不是此问题。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值