文章目录:
前言
卸载已经安装的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