一起做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。博主未试过,但感觉不是此问题。