安装opencv3.4.6,在github/opencv没找到wiki,参考了一些博客。过程中遇到一些问题,在此做一下记录。
参考博客:
https://blog.csdn.net/tutengcsdn/article/details/90346709
https://blog.csdn.net/weixin_42106049/article/details/102093424 #安装过程跟着这个做
解决错误参考:
https://blog.csdn.net/qq_33475105/article/details/82819850
https://answers.opencv.org/question/7666/build-failure-244-unsupportedeigenmatrixfunctions/
https://blog.csdn.net/weixin_44152895/article/details/102882502
一、下载opencv源码、opencv_contrib源码
github上下载,太慢了,就用gitee下载。记得用终端git clone 下载,不然没法git checkout选择版本。
二、编译安装
参考https://blog.csdn.net/weixin_42106049/article/details/102093424 #安装过程跟着这个做
三、遇到的问题
make的时候:
问题一:opencv2/xfeatures2d/cuda.hpp: 没有那个文件或目录
/home/gyh/opencv_source/opencv/modules/stitching/include/opencv2/stitching/detail/matchers.hpp:52:101: fatal error: opencv2/xfeatures2d/cuda.hpp: 没有那个文件或目录
解决方法总结在前面:
- 找到下面这个文件
~/opencv_source/opencv/modules/stitching/Cmakelists.txt
在里面添加下面一行;一定要添加set(STITCHING_CONTRIB_DEPS "opencv_xfeatures2d")前面。
INCLUDE_DIRECTORIES("~/opencv_source/opencv_contrib/modules/xfeatures2d/include")
- 根据报错提示找到 matchers.hpp,将其中的“opencv2/xfeatures2d/cuda.hpp”的引用改为绝对路径。
#ifndef OPENCV_STITCHING_MATCHERS_HPP
#define OPENCV_STITCHING_MATCHERS_HPP
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/opencv_modules.hpp"
#ifdef HAVE_OPENCV_XFEATURES2D
//# include "opencv2/xfeatures2d/cuda.hpp"
# include "/home/gyh/opencv_source/opencv_contrib/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp"
#endif
经历的整个过程记录:
这个问题很奇怪,说的是在一些文件中,#include“matchers.hpp”时出错,出错的原因是matchers.hpp中没有“opencv2/xfeatures2d/cuda.hpp”这个文件。找到matchers.hpp打开,看到其中确实引用了这个“opencv2/xfeatures2d/cuda.hpp”
#ifndef OPENCV_STITCHING_MATCHERS_HPP
#define OPENCV_STITCHING_MATCHERS_HPP
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/opencv_modules.hpp"
#ifdef HAVE_OPENCV_XFEATURES2D
# include "opencv2/xfeatures2d/cuda.hpp"
#endif
百度之后,都说这个错误是因为添加了opencv_contrib这个扩展模块库(extra_modules_lib),才导致的编译错误。
“opencv2/xfeatures2d/cuda.hpp”这个文件就是opencv_contrib中的(这是从哪看出来的,我也没搞懂),路径为:
~/opencv_source/opencv_contrib/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp
这个文件是存在的,只是编译的时候找不到,只要想办法让他能找到就好了。
但奇怪的是,这个错误在编译过程中反复出现,解决了一个,没问题了,后面编译到别的功能包时,依然还出现,很奇怪。
第一次:报错信息如图
解决方法:改Cmakelists.txt,加东西。
根据错误提示,都是在编译opencv/modules/stetching时,产生的错误。
故按照路径找到这个包,找到他的Cmakelists.txt,路径为:
~/opencv_source/opencv/modules/stitching/Cmakelists.txt
在他的Cmakelists.txt中添加:
INCLUDE_DIRECTORIES("~/opencv_source/opencv_contrib/modules/xfeatures2d/include")
一定要添加set(STITCHING_CONTRIB_DEPS "opencv_xfeatures2d")前面,否则就会遇到第二次错误。。。
第二次:
解决方法:改Cmakelists.txt 中添加的位置。
INCLUDE_DIRECTORIES("~/opencv_source/opencv_contrib/modules/xfeatures2d/include")
一定要添加set(STITCHING_CONTRIB_DEPS "opencv_xfeatures2d")前面
第三次:
按理说经过前两次之后,应该是没问题了,但还是太天真了。。。编译到最后他又出错了
如上图,这次又多了个opencv/modules/python包找不到“opencv2/xfeatures2d/cuda.hpp”
解决方法:改matchers.hpp中的include为绝对路径,同时删掉Cmakelists.txt加的东西。
根据上图错误提示的路径找到matchers.hpp,把“opencv2/xfeatures2d/cuda.hpp”的引用改为绝对路径。
#ifndef OPENCV_STITCHING_MATCHERS_HPP
#define OPENCV_STITCHING_MATCHERS_HPP
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/opencv_modules.hpp"
#ifdef HAVE_OPENCV_XFEATURES2D
# include "/home/gyh/opencv_source/opencv_contrib/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp"
#endif
为啥还要把Cmakelists.txt里添加的INCLUDE_DIRECTORYS删掉呢?因为我想试试看。按理说这两个方法都能解决找不到依赖的情况,但是为啥添加INCLUDE_DIRECTORYS之后还有找不到的情况。。。
第四次:啪啪打脸
将matchers.hpp中的“opencv2/xfeatures2d/cuda.hpp”引用改为绝对路径,去掉Cmakelists.txt里添加的INCLUDE_DIRECTORYS,果然又出错了,这次是另一个引用了“opencv2/xfeatures2d/cuda.hpp”的precomp.hpp找不到头文件。解决方法:算了吧,我还是把Cmakelists.txt中的INCLUDE_DIRECTORYS再加回来吧。
其实找到报错的这个文件precomp.hpp,把他的引用也改成绝对路径应该也行,不过我没试,就目前这样改已经可以解决问题了。
问题二:unsupported/Eigen/MatrixFunctions:没有那个文件或目录
这是又找不到头文件了...一看是Eigen库的哪个头文件找不到,打开这个odomerty.cpp,看看他的引用:
# include <Eigen/Core>
# include <unsupported/Eigen/MatrixFunctions>
# include <Eigen/Dense>
其他两个都找得到,就中间这个找不到。那就去找找这个eigen库,看看到底有没有这个文件(前提是你已经装了eigen库)
在计算机的/usr/include/里能找到安装好的eigen库,可以看到有两个相关的文件夹,Eigen和eigen3,文件“unsupported/Eigen/MatrixFunctions”在eigen3里,显然这个#include的路径不太对,给他改成:
# include <eigen3/unsupported/Eigen/MatrixFunctions>
问题三:vgg_generated_120.i:没有那个文件或目录,或找不到其他.i文件
找到这个报错里的vgg.cpp文件,打开看看,发现里面会选择性的引用一堆".i"文件,但是这个文件夹里并没有这些文件。
解决方法:下载相关文件放到这个vgg.cpp所在的文件夹。
在:https://github.com/opencv/opencv_3rdparty/branches/stale?page=1
下载: “contrib_xfeatures2d_vgg_20160317” 和"contrib_xfeatures2d_boostdesc_20161012"两个分支
并将解压后的文件中的所有.i文件复制到以下目录:
~/opencv_source/opencv_contrib/modules/xfeatures2d/src