文章目錄:
前言
卸載已經安裝的OpenCV
安裝依賴項
下載OpenCV和OpenCV_contrib
編譯和安裝帶contrib的OpenCV
問題集錦
測試Opencv3
參考資料
前言:
python訓練好了模型,生成了可讀取的pb文件,如果用C++來調pb,就需要編譯安裝opencv了,先說一下我的環境,
ubuntu16.04+CUDA-9.0,tensorflow-gpu1.12,源碼編譯的tensorflow為1.9
卸載已經安裝的OpenCV
先確定一下,之前是否編譯過OpenCV
pkg-config --modversion opencv? ?#可查看opencv版本信息
如果沒有,這步可以跳過了
先進入到安裝opencv的目錄,找到build文件夾
cd build
sudo make uninstall
cd ..
sudo rm -r build
rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
安裝依賴項
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev qt5-default
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
我在執行第三個命令時出現了如下問題
這是因為python-dev沒有安裝,這個不能用pip install安裝,只能用sudo apt-get? install安裝,在裝之前需要安裝aptitude工具
sudo apt-get install aptitude? ? ? ? #安裝aptitude工具
sudo aptitude install python-dev? #使用aptitude安裝python-dev
有兩個地方需要注意,如下所示:
這里附上,我解決此問題的地址https://www.cnblogs.com/ymjyqsx/p/6194968.html,以示對作者的尊重~~
下載OpenCV和OpenCV_contrib
好了,依賴庫安裝完了,就需要下載OpenCV和OpenCV_contrib了
附一下OpenCV官方地址,我下載的是3.4.6版本
對應contrib官方地址。
下載后解壓
unzip opencv-3.4.6.zip
unzip opencv_contrib-3.4.6.zip opencv-3.4.6/? ? ? #解壓到opencv目錄下
cd opencv-3.4.6
mkdir build
cd build?
編譯和安裝帶contrib的OpenCV
附一下這篇博客,作者提到,在opencv\modules\cudev\include\opencv2\cudev\common.hpp中添加以下頭文件包含
#include <cuda_fp16.h>
我按照文中所說,指定cmake 編譯后,make無法正確執行,
根據錯誤提示,修改了cmake內容如下,錯誤問題后面會有所描述
cmake -D CMAKE_BUILD_TYPE=Release -D WITH_PROTOBUF=OFF -D WITH_EIGEN=OFF -D BUILD_opencv_xfeatures2d=OFF -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.6/modules ..
make?
make install?
問題集錦:
期間遇到了如下問題:
1、fatal error: Eigen/Eigenvalues: No such file or directory
eigen明明我已經安裝了,make時確報出找不到eigen文件。。。。
附上我安裝eigen時參考的地址,以示對作者的尊重
確定eigen已經正確安裝,make編譯仍然出錯的
在cmake的時候可以加上WITH_EGEN=OFF
2、編譯時提示opencv_contrib缺少boostdesc_bgm.i等文件
錯誤提示:
~/opencv_contrib/modules/xfeatures2d/src/boostdesc.cpp:673:20: fatal error: boostdesc_bgm.i: No suchfileor directory
這時如果查看build文件夾下的CMakeDownloadLog.txt,會發現其中指出boostdesc_bgm.i缺失,到其指定地址下載。
或者到這個下載鏡像下載:boostdesc_bgm.i,vgg_generated_48.i等.rar,放在?opencv_contrib/modules/xfeatures2d/src/?路徑下
3、fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or directory
解決方法:
1、查找該文件以及路徑:
find . -name "cuda.hpp"
會發現文件存在:?./opencv-3.4.6/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp
2、找到上述文件的路徑,替換出錯文件中引用cuda.hpp的位置代碼即可。
注意:
1、 有兩個文件引用了該cuda.hpp文件所以要改兩次,改報錯文件前可以先備份。
2、安裝opencv和對應opencv_contrib文件時可以直接將opencv_contrib中所有文件復制到opencv文件夾中,不會存在覆蓋問題。
4、報錯 fatal error: opencv2/xfeatures2d.hpp: No such file or directory
我按照這篇文章所說,單獨編譯了opencg_contrib,放入opencv文件夾中,然而并沒有解決我的問題
我的目錄中已經存在了此文件,確仍不能正確調用
最后設置cmake時指定
-D BUILD_opencv_xfeatures2d=OFF
解決了問題
添加路徑:
安裝完成之后,添加路徑。
????????sudo vim /etc/ld.so.conf.d/opencv.conf
在末尾添加如下內容:
? ? ? ? ? /usr/local/lib
保存之后執行:
? ? ? ? ? sudo ldconfig
? ? ? ? ? sudo vim /etc/bash.bashrc
在末尾添加如下內容:
????????PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
????????export PKG_CONFIG_PATH
source一下,使修改立即生效。
????????source /etc/bash.bashrc
查看opencv版本? ?
????pkg-config --modversion opencv?
測試Opencv3
1、運行命令:pkg-config?--cflags?--libs?opencv?出現下面信息:
2、運行一個最簡的程序:
DisplayImage.cpp
#include <cv.h>
#include <highgui.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main( int argc, char** argv )
{
? ? Mat image;
? ? image = imread( argv[1], 1 );
? ? if( argc != 2 || !image.data )
? ? {
? ? ? ? printf( "No image data \n" );
? ? ? ? return -1;
? ? }
? ? namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
? ? imshow( "Display Image", image );
? ? waitKey(0);
? ? return 0;
}
g++編譯方式測試:
1、執行命令:
g++ DisplayImage.cpp -o display `pkg-config --cflags --libs opencv`
2、顯示圖片
執行./display 0.jpg,可以顯示圖片,證明OpenCV安裝成功
參考資料
ubuntu 下配置opencv問題-Eigen/Eigenvalues: No such file or directory
編譯OpenCV提示opencv_contrib缺少boostdesc_bgm.i等文件
fatal error: boostdesc_bgm.i: No such file or directory?#130