ubuntu12.04下Python 3.5.3 +OpenCV 3.2.0编译环境搭建

来源:互联网 发布:js 获取iframe 对象 编辑:程序博客网 时间:2024/05/20 18:18

参考文章:http://www.jianshu.com/p/67293b547261

点击打开链接


网络上有很多类似的文章,我参考了这里。但是我这里安装 OpenCV3.2.0 过程还是遇到不少问题,和网络上可以查到的问题不一样,总结下。

我这里使用的是Python 3.5.3 +OpenCV 3.2.0 大家可以参考看下。


用到的资源文件,可以到这里下载

Python 3.5.3

http://download.csdn.net/download/mailyiran200101/9929105点击打开链接

opencv-3.2.0.tar.gz

包括(opencv+opencv_contrib)

链接:http://pan.baidu.com/s/1micFFlu 点击打开链接   密码:4mnk

>>提示:另外如果在opencv-3.2.0.tar.gz编译源码的时候,提示正在下载第三方ippicv时,但是很久都连不了,可以直接到这里下载

ippicv_linux_20151201.tgz

http://download.csdn.net/download/mailyiran200101/9930459点击打开链接

-----------------------------------------------------------------------------------------------------------------------------------------------------------

主要三个步骤

步骤一: 安装依赖库
步骤二:安装OpenCV 3.2.0
步骤三:遇到的问题以及如何解决
---------------------------------------------------------------------------------------------------------------------

正文开始:


步骤一: 安装依赖库

<1>更新系统的源

sudo apt-get update


<2>安装从源码构建 Open CV 的相关工具

sudo apt-get install build-essential git cmake pkg-config


<3>加载不同格式图片的工具包

sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev


<4>视频流 I/O 包

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev


<5>GTK, 给图形界面操作用的

sudo apt-get install libgtk2.0-dev


<6>安装下面的包可以在 Open CV 里面优化各种函数

sudo apt-get install libatlas-base-dev gfortran


步骤二:安装OpenCV 3.2.0 以及编译源码


安装OpenCV 3.2.0 有两种方式:这里先不说会遇到什么问题,先讲下各自的方法


<1> pip3直接搜索安装


依赖库安装完后。之后我可以直接就用python3系统自带的pip3安装opencv-python,指令如下:

pip3 install opencv-python

这个指令会在python3中自动安装最新的opencv-python版本以及其它依赖库。

安装完成后在系统中进入python3.5,并查看是否安装成功


信息提示,opencv的版本是3.2.0。这个时候就说明已经安装好了。

安装完成后会在 /usr/local/lib/python3.5/site-packages目录下看到

cv2 和 opencv_python-3.2.0.8.dist-info 两个文件夹

这个方法非常的简单,快速,一开始我就使用这个方式,但是在之后测试运行代码的时候遇到报错的情况。



<2>OpenCV源码下载编译安装

第一步:获取源码

从 Github 上把 Open CV的源码 pull 下来, 然后切换到新的版本 3.2.0


cd  /home/ljh   /*路径自己选择,最好英文路径,避免编译报错*/
git clone https://github.com/Itseez/opencv.git
cd opencv
git checkout 3.2.0

---------------------------------

要完整地安装 OpenCV 3.2.0 的话, 最好把 opencv_contrib 也拉下来


cd  /home/ljh   /*路径自己选择,最好英文路径,避免编译报错*/
git clone https://github.com/Itseez/opencv_contrib.git
cd opencv_contrib
git checkout 3.2.0

----------------------------------

如果网络不好的话,也可以直接下载在本文开头提供的代码,opencv-3.2.0.tar.gz 包括opencv + opencv_contrib

解压后有两个文件   opencv  和 opencv_contrib 。


第二步:在 Python 3.5.3 下编译 Open CV

1》进opencv当前目录

cd /home/ljh/opencv

2》新建编译输出文件

mkdir build 

3》进入编译输出路径

cd build 
4》配置编译变量

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D PYTHON3INTERP_FOUND=/usr/local/bin/python3.5 \
-D PYTHON3_EXECUTABLE=/usr/local/bin/python3.5 \
-D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.5/site-packages \
-D PYTHON3_LIBRARY=/usr/local/lib/libpython3.5m.so \
-D PYTHON3LIBS_FOUND=/usr/local/lib/libpython3.5m.so \
-D PYTHON3_INCLUDE_DIR=/usr/local/include/python3.5m \
-D PYTHON3_INCLUDE_PATH=/usr/local/include/python3.5m \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/site-packages/numpy/core/include \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON \
-D BUILD_opencv_python3=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/ljh/opencv_contrib/modules ..


!!!!配置变量非常关键,根据具体文件实际路径选择

##cmake的配置 一定要写明
PYTHON3_INCLUDE_PATH
PYTHON3_NUMPY_INCLUDE_DIRS

这两个变量,否则不会编译出所需要的python3  lib库


5》开始编译

make -j && make install  (为了显著加快编译这里  可以:  make -j8   意思是8核编译,根据自己机器来)


6》验证编译完成

如果编译成功,会在以下路径看到python3对应的lib库 cv2.cpython-35m-x86_64-linux-gnu.so




第三步:把编译出来的库替换 由方法一 ‘pip3 install opencv-python’  生成的对应路径的lib库


!!!!提示.so库的文件名如果不一样,要改成原来的名字

进入python3.5重新测试,是否可以使用,import cv2。经过测试目前,方法一出现的问题也解决了。测试代码成功。



步骤三:遇到的问题以及如何解决

<问题1>

在步骤二的时候,一开始用的 pip3直接安装opencv-python的方式,但是在运行测试代码 这句的时候 cv2.namedWindow 的时候,报了如下的错误,信息如下:


这个问题网上大多数的解决方法如下:


这里我按照网上方法卸载opencv-python,然后安装了依赖库 pkg-config, libgtk2.0-dev,然后再重新安装opencv-python,还是没有效果,后来我又测试了一个全新的ubuntu的环境,同样的安装正常,但还是到运行的时候报错。网络上可以查到的方法都没有效果。这里依赖库如下,就是 ‘步骤一 ’ 中已经安装的<2><5>,

<2>安装从源码构建 Open CV 的相关工具

sudo apt-get install build-essential git cmake pkg-config

<5>GTK, 给图形界面操作用的

sudo apt-get install libgtk2.0-dev


解决方法:

使用 ‘步骤二’ 中的第二种  <2>OpenCV源码下载编译安装   方法,从源码中重新生成新的python3.5 可以使用的lib库,替换之前由pip3 install opencv-python指令来安装的对应路径的lib库。参考前面'步骤二',有具体步骤。



<问题2> 

下载编译opencv-3.2.0的时候网络原因导致第三方库ippicv下载不下来,编译报错


解决方法:

这里可以用本文开头提供的已经下载好的ippicv_linux_20151201.tgz 文件直接放在以下路径下,再重新编译

我这里的路径如下:

opencv/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz


<问题3>

没有编译出所需要的python3  lib库 cv2.cpython-35m-x86_64-linux-gnu.so


原因:还是在前面的编译的配置cmake 有问题,能否编译出python3能用的lib库,取决于这个文件

在opencv中 opencv/modules/python/python3目录下文件CMakeLists.txt中 有如下提示。

-----------------------------------------------------------
if(NOT PYTHON3_INCLUDE_PATH OR NOT PYTHON3_NUMPY_INCLUDE_DIRS)####注意这两个
  ocv_module_disable(python3)
endif()


set(the_description "The python3 bindings")
set(MODULE_NAME python3)
set(MODULE_INSTALL_SUBDIR python3)


set(PYTHON PYTHON3)


include(../common.cmake)


unset(MODULE_NAME)
unset(MODULE_INSTALL_SUBDIR)
-----------------------------------------------------------
##所以前面cmake的配置 一定要写明,以下的两个变量。如果没有注明。默认就不会编译出lib库的。
PYTHON3_INCLUDE_PATH
PYTHON3_NUMPY_INCLUDE_DIRS
#################################################################################


其它的变量这里做下解释:

-D CMAKE_INSTALL_PREFIX=/usr/local \    

##默认设置,直接写
-D PYTHON3INTERP_FOUND=/usr/local/bin/python3.5 \   

##用的是哪个python3,必须指明
-D PYTHON3_EXECUTABLE=/usr/local/bin/python3.5 \    

 ##用的是哪个python3,必须指明
-D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.5/site-packages \  

##python3安装其它包文件的安放路径
-D PYTHON3_LIBRARY=/usr/local/lib/libpython3.5m.so \        

##python3.5对应的共享库文件,在编译安装python3.5的时候需要使用指令./configure -enable-shared ,否者会找不到这个文件
-D PYTHON3LIBS_FOUND=/usr/local/lib/libpython3.5m.so \

##同上
-D PYTHON3_INCLUDE_DIR=/usr/local/include/python3.5m \
-D PYTHON3_INCLUDE_PATH=/usr/local/include/python3.5m \

##都是python3.5安装后对应包含的头文件路径
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/site-packages/numpy/core/include \

##依赖库numpy后对应包含的头文件路径
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \

-D BUILD_EXAMPLES=ON \

##这三个没有也可以。
-D BUILD_opencv_python3=ON \

##是否编译python3需要的库,似乎没什么用
-D OPENCV_EXTRA_MODULES_PATH=/home/ljh/opencv_contrib/modules ..

##外部opencv_contrib的路径