原来的项目使用opencv3.4.0开发,需要更新至opencv4.4.0,于是出现了版本的问题。
在ROS中使用opencv时,发现节点打不开,直接卡死,经过调试后发现问题出在了cv::FileStorage。
创建了一个cv::FileStorage对象fs,由fs读取参数,但是由于读取失败,fs.isOpened=0,造成了core dumped的问题。在输出的报错信息中出现了opencv3.2.0的字样(/build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core)
解决方法:
首先尝试在CMakeLists.txt中把OpenCV_DIR,OpenCV_INCLUDE_DIRS,OpenCV_LIB_DIR都set成实际使用的opencv版本的路径,把find_package中的版本改对,但并没有解决问题。
后来经过查询,认为是ROS中的cv_bridge需要调用opencv3.2.0,然而,项目使用的是opencv4.4.0,所以出现了问题。
参考这篇文章的方法修改cv_bridgeConfig.cmake
https://blog.csdn.net/bigdog_1027/article/details/79092263
文中的是在ROS Kinetic下,把原有的opencv3换成了opencv2,本文遇到的情况是在ROS Melodic下,把原有的opencv3.2换成4.4,虽然情况不同但是方法类似,具体来说,修改了如下两处:
重新编译后,问题得到了解决。
参考:
https://answers.ros.org/question/352756/specify-opencv-version-ros-melodic-ubuntu-1804/
https://www.cnblogs.com/pine-apple/p/14545448.html
https://blog.csdn.net/bigdog_1027/article/details/79092263
https://blog.csdn.net/weixin_40830684/article/details/107568786