本人是Ubuntu和opencv的纯萌新,应为机器视觉课程的原因接触了这些内容。最开始在虚拟机上做,后来迁移到了双系统,在新机子上重新配了一遍,随着课程进展用到了越来越多的功能,也碰到了不少问题,在这里做个总结。
opencv的安装其实网上有很多详细的文章了,在这里就不再赘述了。唯一要注意的是一定!一定!一定!不要无脑下载最新版本。很多开源算法和最新一些版本的opencv都会有不兼容的情况。我最开始就是直接下了4.6.0,然后碰到了一堆问题……当然新版本也是可以用的,只是碰到很多问题时网上很可能找不到相关的教程,想要自己解决会有一定困难。所以建议是装3.X的版本。我最后安装的是3.4.10的,如果有需要可以跟着我的来,估计碰到的问题是差不多的。另外可能网上一些教程会让你装anaconda,之前在虚拟机上也装了,把环境搞得一团糟,还导致ROS运行出错……所以尽可能别用吧……
我在安装时选择的方法是到github上下载zip,然后解压,再自己在源码文件夹里创建build,使用cmake来安装。这套方法大家其实可以多熟悉熟悉,很多软件的安装都可以这样来做。具体的安装流程可以看下面装contrib的那篇文章,或者自己随便找一篇也行。其中碰到了libjasper无法定位的问题,从别处找到的解决方法如下:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
这里额外提一句,如果碰到问题觉得opencv的版本不合适想要更改,不! 要!直接删除opencv的源码文件夹,这样你安装的时候创建的很多环境变量和库文件都还在,即使新编译一个版本也可能存在问题。正确的做法参考这篇文章:
彻底卸载opencv_今年不吃饭...的博客-CSDN博客_卸载opencv
在按照里面操作好之后建议再使用搜索功能搜索opencv2和opencv4,再把所有的相关文件全部删除,彻底的除去(当然,如果电脑才刚开始用的话重装系统也不失为一种选择)。
之后由于课程需要需要使用特征提取的模块,是在xfeatures2d里面的,搜了一下需要安装opencv_contrib,于是下载并安装了,过程中在make的过程中碰到了很多问题,其中主要的问题都参考了这篇文章解决:
Ubuntu 安装 C++ opencv 和opencv_contrib (主要记录出现的问题以及解决方法)_Lucky dog123的博客-CSDN博客_c++ opencv ubuntu
非常感谢这位大佬。我之前和这个模块死磕了两天,最后全部卸载从头再来,过程中碰到的问题基本都在这篇文章里了,包括
fatal error:boostdesc_bgm.i:没有那个文件或目录
52:12: fatal error: opencv2/xfeature/cuda.hpp
这两个问题,都可以按照这篇文章解决。出现这两个问题的根本在于:1.在cmake的时候大家或许就发现了有很多download failed,应当就是这些文件没有下在成功导致的;2.这个include的互相关系出现了问题,导致只能从绝对路径来找到。
其中再提补充一点,在解决第二个问题,也就是各种文件的引用的问题的时候,要注意仔细看命令行的报错,一般的格式是
in flie included from xxxxx.hpp
xxxxx.cpp
……
#include<xxx.hpp> xxx.hpp No such file or directory
前面几个是在include关系中出错的文件,最后一个才是根本的出错的,需要更改的文件。opencv的代码结构非常复杂,include的相互关系很乱,所以一定要找到最后那个文件,把里面那个找不到的路径改成绝对路径,应该就可以了。另外这里我碰到的出错的文件和那片文章不是完全一样的,可能不同版本也会不一样,原理都是一致的,就找到那个找不到的文件,并找到其绝对路径,然后替代之。我这边是改了三四个文件才过了这部分编译。
结果后来又碰到了
cv::xfeatures2d::SIFT’ has not been declared
这个问题,参考了
Ubuntu下安装opencv3.4.6+opencv_contrib_pursuit_zhangyu的博客-CSDN博客
这篇文章得以解决。根本问题是没有正确的include相关的文件,其实和上一步的第二个问题是类似的。
这样后我就成功make了!然后sudo make install就可以了。其他文件的设置等可以参考上面两篇文章,就基本大功告成了。
最后在使用cmake来编译运行程序的时候又碰到了问题,主要是我之前安装了另一个版本,导致系统库里的CMake相关文件里保存了其他版本的相关信息。解决方案是仔细看命令行里面报错的文件,并删除之。然后再重新跑一遍cmake,就解决了。
总结就是,碰到问题的话就仔细看命令行,看出错的原因和相关文件,做好定位。如果不会的就复制错误的信息搜一下,基本能找到类似的问题,再结合自己的情况解决一下就好。opencv毕竟是一个大的开源项目,里面有一些问题也难免。希望官方可以尽早解决一些吧,让我们这些小白不用绕这么多弯路hhh
有什么问题欢迎交流!之后做作业碰到其他问题也可能会继续更新!