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: 沒有那個文件或目錄解決方法總結在前面:
- 找到下面這個文件
在里面添加下面一行;一定要添加set(STITCHING_CONTRIB_DEPS "opencv_xfeatures2d")前面。
INCLUDE_DIRECTORIES("~/opencv_source/opencv_contrib/modules/xfeatures2d/include")- 根據報錯提示找到?matchers.hpp,將其中的“opencv2/xfeatures2d/cuda.hpp”的引用改為絕對路徑。
經歷的整個過程記錄:
這個問題很奇怪,說的是在一些文件中,#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安装-3.4.6(+opencv_contrib;环境:ubuntu1604-NVIDIA-已装cuda)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树——树和二叉树
- 下一篇: SMARTFORM 插入列、增加表格边框