第二章主要记录调试记录,完整的正确安装流程参考第三章
1 OpenCV是什么
OpenCV 是一个开源的计算机视觉库,用C语言和 C++ 语言编写,可以在 Windows、Linux、Mac OS X 等系统运行。同时也在积极开发 Python、Java、Matlab 以及其他一些语言的接口,将库导入安卓和 iOS 中为移动设备开发应用。
OpenCV 设计用于进行高效的计算,十分强调实时应用的开发。它由 C++ 语言编写并进行了深度优化,从而可以享受多线程处理的优势。
OpenCV 的一个目标是提供易于使用的计算机视觉接口,从而帮助人们快速建立精巧的视觉应用。
OpenCV 库包含从计算机视觉各个领域衍生出来的 500 多个函数,包括工业产品质量检验、医学图像处理、安保领域、交互操作、相机校正、双目视觉以及机器人学。
因为计算机视觉和机器学习经常在一起使用,所以 OpenCV 也包含一个完备的、具有通用性的机器学习库(ML模块)。这个子库聚焦于统计模式识别以及聚类。ML 模块对 OpenCV 的核心任务(计算机视觉)相当有用,但是这个库也足够通用,可以用于任意机器学习问题。
REF: http://c.biancheng.net/view/1089.html
https://opencv.apachecn.org
2 调试记录
OpenCV是VINS运行的必须条件之一,安装opencv并让vins可以正确调用足足折腾了我一周多
2.1 查看opencv版本
nx刚烧好镜像的时候打开终端输入
pkg-config –modversion opencv
查看opencv版本,这条指令敲进去应该会返回一个没找到opencv,再输入
pkg-config –modversion opencv4
可以看到回复 4.1.1(2022年1月) ,这说明镜像里预装了opencv4,进入/usr/include可以看到opencv4文件夹
也可以安装jtop 在其中查看opencv版本和cuda开启状态
2.2 安装清单:
为了vins能够正确编译,需要将以下程序的正确版本安装到位
l 一大堆各种依赖,参考REF前两条
l 和系统兼容的opencv版本(3.4.X)
l 和系统兼容的cv-bridge版本(melodic)
l 和ros兼容的python版本(不要单独装python3.7)
解释一下每条都是干啥的,各种依赖就不说了,有一个libjasper-dev比较不好装,第一个REF有换源方案可以解决;vins中调用和很多opencv的库,不同版本之间参数名称不一样;cv-bridge是用于解决不同版本opencv之间兼容性的;python2和python3之间也有兼容性问题,不要随便改
以上每一条都是踩了无数坑趟出来的,好多时候欲哭无泪,可能有很多种正组合,都被我完美的避开了
REF https://blog.csdn.net/n66040927/article/details/103176979
https://zhuanlan.zhihu.com/p/411901208
2.3 Round I 修改cvbridge路径
什么操作都做,直接编译vins的话,会产生如下报错:
Project ‘cv_bridge’ specifies ‘/usr/include/opencv’ as an include dir, which is not found.
看看错误信息,cv-bridge找了找opencv,没找着,那是肯定找不着啊,因为根本没装,系统里只有opencv4,在名为opencv4的文件夹下,按照ref里的教程,打开报错的cmake文件:
在终端中输入
Sudo gedit /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.Cmake
将100行附近的两个opencv改成opencv4即可(注意,只需要改动单独一个的opencv,前面有连字符的opencv不需要改动)
REF:https://blog.csdn.net/qq_43310597/article/details/109256838
2.4 Round II 修改vins 参数名
按照2.3操作后,vins的编译可以继续进行,进行到22%左右会开始报错
error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope
经检索是vins的cv版本和系统的cv版本不同所致,网上有各种教程,比如修改为cv::LOAD_IMAGE_COLOR,添加头文件等等,统一放在REF里
REF: https://blog.csdn.net/CxC2333/article/details/107848500
https://zhuanlan.zhihu.com/p/432167383
https://blog.csdn.net/Bixiwen_liu/article/details/107345635
2.5 Round III 安装opencv3.4.16
Sadly,修改了一堆参数名之后,编译仍然无法通过,没有明确的报错信息,只能转战opencv3,此时opencv网站最新的版本为3.4.16,有教程说要先卸载高版本的opencv(REF1),其实不用,本身opencv3和4文件夹名称就不一样,如果确实要安装两个3.X的话,可以参考REF2,注意安装路径并对应修改环境变量即可
////////////////////////////////////CAUTION!/////////////////////////////////////
到此为止是所有尝试中最接近成功的一次,但是由于对linux系统不熟悉,只能按着教程做,并不太清楚自己都干了些什么,安装好opencv后,仍然按照2.3的方法把cv-bridge中opencv的路径指到了opencv4去,其实这时候只要指到刚装的3.4就成功了
REF:https://zhuanlan.zhihu.com/p/411901208
https://blog.csdn.net/qq_33764934/article/details/103744689
2.6 Round IV 安装opencv3.2.0
按照2.5操作,毫无意外地,编译过不去,报错提示opencv3.4与3.2不兼容,debug时还把环境搞得乱七八糟,没办法只能重新烧镜像,从头开始
既然提示了3.2,那就装3.2,教程可以参考REF前两条,如果还是缺少依赖的话参考REF3和4。
REF1和2的cmake的参数不一样,按照2编译仍然各种报错,最后报缺少libboost_python3-py37.so,网上主流教程是通过软连接补齐,但是仍然报错,尝试通过ref5提到的方法下载此文件,但是仍然报错,按照ref1的参数编译可以正常进行,但是build文件体积非常大。膨胀到10G后没有空间,只能终止
REF:https://zhuanlan.zhihu.com/p/411901208
https://blog.csdn.net/n66040927/article/details/103176979
https://www.cnblogs.com/rohens-hbg/p/12326084.html
https://blog.csdn.net/qq_41821678/article/details/118491849
https://blog.csdn.net/yinwenbin0805/article/details/105200339
2.7 Round V 换内存卡
更换内存卡,按照2.6 REF1的参数编译,但是编译报错,怀疑缺少依赖,多次尝试后失败
2.8 Round VI ros-noetic-cv-bridge
如果不能安装opencv3.2.0,尝试安装支持opencv4的cvbridge,安装ros-melodic-cv-bridge,发现不支持cv4,于是安装ros-noetic-cv-bridge,之前有成功安装经验但是本次编译过不去,结合opencv网站上主打的版本是4.5和3.4,总结到了两条对应的版本线:
Ubuntu20.04 ---- ros-noetic ---- opencv4.x ---- ros-noetic-cv-bridge
Ubuntu18.04 ---- ros-melodic ---- opencv3.4 ---- ros-melodic-cv-bridge
确定了正确的版本,然后让他们互相能找到就好了
3 正确安装流程记录
3.1 检查opencv版本及其安装位置(4.1.1 /usr/include/opencv4)
3.2 从opencv网站或者github下载opencv3.4的sourse
3.3 编译安装
cd build
mkdir build
cmake .. //此处没有使用任何参数,
make ..
sudo make install
3.4 Sudo gedit /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.Cmake
将100行附近的两个opencv的路径修改为/usr/local/share
说明:在cmake时不添加参数会安装到系统默认位置,本次安装实际位置为/usr/local/share/opencv,可以通过修改编译参数安装到指定位置,比如:
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
3.5 Pkg-config –modversion opencv
显示3.4.16 安装成功并且vins编译成功
4 总结
折腾了快两周,也算是对linux系统有了一些了解,刚接触踩踩坑总是不可避免的,但是像我这样踩的这么全面的可能也不多。现在看来网上这些教程仍然时授之以鱼的方式,一行一行照着复制粘贴,即使知道每一行指令时什么意思,也不知道整体上在干什么,如果清楚的知道教程的思路那在2.5的时候就可以成功了