首先,说一下为什么要这么配置。
最近要在一台电脑上进行简单的深度学习方面的学习,所以查资料啊,据说是tensorFlow和python3适配更好,而且python3代表了python的发展方向,所以安装python3貌似理所当然啊。不过,python3貌似只支持opencv3.0以上版本(道听途说,不知是否这样),而且opencv3.0以上版本,SURF和SIFT等算法都在opencv_contrib里面,需要单独编译。其实这个没有问题,配置过程也不难,网上教程一大堆,可是在博主的电脑上,从opencv3.1试到opencv3.4,编译环境和路径设置都没问题,可xfeatures2d就是编译不过啊。博主强迫症,没有SURF和SIFT怎么可以,而且在编译c++程序的时候也会用到。所以毅然决然的配置两个版本opencv,分别为2.4.9和3.3.1(不包含contrib),并实现python2.7默认调用opencv2.4.9,python3.5默认调用3.3.1,且cmke编译c++时,可选择切换opencv版本。
首先下载opencv源码:https://github.com/opencv/opencv/tree/2.4.9和../3.3.1
编译安装过程网上教程一大堆,就不详细介绍了。注意:一定要先编译安装opencv3.3.1,再安装2.4.9,博主之前先编译2.4.9,再安装3.3.1,可是python3无法调用opencv3.3.1。
1 安装opencv3.3.1
说明:博主电脑由于xfeatures2d编译不过,没有编译contrib(否则不必这么折腾了)。
安装各种依赖项
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install pkg-config
下载后解压,进入解压目录
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D PYTHON3_EXECUTABLE=/usr/bin/python3 \
-D PYTHON_INCLUDE_DIR=/usr/include/python3.5 \
-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/dist-packages/numpy/core/include \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D PYTHON_EXECUTABLE=/usr/lib/python3 \
-D BUILD_EXAMPLES=ON ..
出现如下界面
说明编辑路径设置成功,执行
make -j4 #(根据电脑核数确定)
sudo make install
需要
注意,如果电脑是8核,最好不要make -j8,很容易超出内存编译出错,最好设置成make -j4或者make -j2。
安装结束,打开终端验证一下。在操作过程中,博主并没有配置环境,如果失败,请配置环境,配置方法见下文。
2 安装opencv2.4.9
由于之前已经安装opencv3.3.1,且安装在默认路径下,所以编译安装opencv2.4.9时,需要更换一下安装目录,这个可以在/usr/local下创建一个,比如安装在/usr/local/opencv249,博主安装在/home/lch/software/opencv249 路径下。
安装依赖项
sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libpng-dev libtiff5-dev libjasper-dev libopenexr-dev cmake git python-dev python-numpy python-tk libtbb2 libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev
下载解压后,进入解压目录
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=ON -D WITH_V4L=ON -D CMAKE_INSTALL_PREFIX=/home/lch/software/opencv249 ..
配置路径后,执行代码。
make -j2
sudo make install
最后配置环境
sudo gedit ~/.bashrc
打开文件,在末尾添加
export PKG_CONFIG_PATH=/home/lch/software/opencv249/lib/pkgconfig
export LD_LIBRARY_PATH=/home/lch/software/opencv249/lib
最后,运行
source ~/.bashrc
此时,opencv2.4.9已经配置完成。打开终端运行一下,不同版本python调用了不同版本的opencv
3 cmake时,不同opencv版本的选择
opencv不仅在python中调用,编写c++时也会调用。在博主电脑上,cmake时默认是调用opencv3.3.1的(博主在安装opencv3时,并没有在/etc/ld.so.conf中添加 /usr/local/lib,也没有在/etc/ld.so.conf.d 目录下增加conf文件来添加 /usr/local/lib,但依然可以运行,如果不能运行,请参考网上opencv安装教程)。但是,博主在c++代码中希望使用opencv2.4.9,毕竟包含SFUR和SIFT的内容,这也是配置多版本opencv的目的。
操作其实很简单,在编辑c++工程的CMakeLists.txt文件时,只需添加一行代码即可
set(OpenCV_DIR "/home/lch/software/opencv-2.4.9/build")
具体路径是你当时编译的build的路径,
注意,这个要添加在roject(MyProjectName)之前,具体如下
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) #设定最低版本
set(OpenCV_DIR "/home/lch/software/opencv-2.4.9/build")
PROJECT( slam ) #设定工程名
SET( CMAKE_CXX_COMPILER "g++") #设定编译器
#设定可执行二进制文件的目录
SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
则用cmake编译时,自动调用opencv2.4.9。
此时,双版本opencv的配置已经完成,实现了不同版本python调用不同版本opencv(不需要配置切换),且编译c++程序时,也可以调用不同的opencv版本。这个设置非常适合在同一台电脑搞深度学习和机器视觉的同学。
Enjoy!