ubuntu 环境下python2.7和python3.5分别调用不同版本opencv的配置,及opencv的切换

         首先,说一下为什么要这么配置。

         最近要在一台电脑上进行简单的深度学习方面的学习,所以查资料啊,据说是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!



          

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值