opencv安装-3.4.6(+opencv_contrib;环境:ubuntu1604-NVIDIA-已装cuda)

安装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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值