参考文章:http://www.jianshu.com/p/67293b547261
@H_502_3@
网络上有很多类似的文章,我参考了这里。但是我这里安装 OpenCV3.2.0 过程还是遇到不少问题,和网络上可以查到的问题不一样,总结下。
我这里使用的是Python 3.5.3 +OpenCV 3.2.0 大家可以参考看下。
@H_502_3@
用到的资源文件,可以到这里下载
Python 3.5.3@H_502_3@
http://download.csdn.net/download/mailyiran200101/9929105点击打开链接@H_502_3@
opencv-3.2.0.tar.gz
包括(opencv+opencv_contrib)
链接:http://pan.baidu.com/s/1micFFlu 点击打开链接 密码:4mnk@H_502_3@
>>提示:另外如果在opencv-3.2.0.tar.gz编译源码的时候,提示正在下载第三方ippicv时,但是很久都连不了,可以直接到这里下载
ippicv_linux_20151201.tgz@H_502_3@
http://download.csdn.net/download/mailyiran200101/9930459点击打开链接@H_502_3@
-----------------------------------------------------------------------------------------------------------------------------------------------------------
主要三个步骤
步骤一: 安装依赖库@H_502_3@ 步骤二:安装OpenCV 3.2.0@H_502_3@ 步骤三:遇到的问题以及如何解决
@H_502_3@
步骤一: 安装依赖库
<1>更新系统的源
sudo apt-get update
@H_502_3@
<2>安装从源码构建 Open CV 的相关工具@H_502_3@
sudo apt-get install build-essential git cmake pkg-config
@H_502_3@
<3>加载不同格式图片的工具包
sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev@H_502_3@
@H_502_3@
<4>视频流 I/O 包@H_502_3@
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev@H_502_3@
@H_502_3@
<5>GTK,给图形界面操作用的@H_502_3@
sudo apt-get install libgtk2.0-dev@H_502_3@
@H_502_3@
<6>安装下面的包可以在 Open CV 里面优化各种函数@H_502_3@
sudo apt-get install libatlas-base-dev gfortran
@H_502_3@
步骤二:安装OpenCV 3.2.0 以及编译源码
@H_502_3@
安装OpenCV 3.2.0 有两种方式:这里先不说会遇到什么问题,先讲下各自的方法
@H_502_3@
<1> pip3直接搜索安装
@H_502_3@
依赖库安装完后。之后我可以直接就用python3系统自带的pip3安装opencv-python,指令如下:
pip3 install opencv-python@H_502_3@
这个指令会在python3中自动安装最新的opencv-python版本以及其它依赖库。
安装完成后在系统中进入python3.5,并查看是否安装成功
@H_502_3@
信息提示,opencv的版本是3.2.0。这个时候就说明已经安装好了。
安装完成后会在 /usr/local/lib/python3.5/site-packages目录下看到
cv2 和 opencv_python-3.2.0.8.dist-info 两个文件夹
这个方法非常的简单,快速,一开始我就使用这个方式,但是在之后测试运行代码的时候遇到报错的情况。
@H_502_3@
@H_502_3@
<2>OpenCV源码下载编译安装
第一步:获取源码
从 Github 上把 Open CV的源码 pull 下来,然后切换到新的版本 3.2.0@H_502_3@
@H_502_3@
cd /home/ljh /*路径自己选择,最好英文路径,避免编译报错*/@H_502_3@ git clone https://github.com/Itseez/opencv.git@H_502_3@ cd opencv@H_502_3@ git checkout 3.2.0@H_502_3@
---------------------------------
要完整地安装 OpenCV 3.2.0 的话,最好把 opencv_contrib 也拉下来@H_502_3@ @H_502_3@ @H_502_3@ cd /home/ljh /*路径自己选择,最好英文路径,避免编译报错*/@H_502_3@ git clone https://github.com/Itseez/opencv_contrib.git@H_502_3@ cd opencv_contrib@H_502_3@ git checkout 3.2.0@H_502_3@
----------------------------------
如果网络不好的话,也可以直接下载在本文开头提供的代码,opencv-3.2.0.tar.gz(包括opencv + opencv_contrib)
解压后有两个文件 opencv 和 opencv_contrib 。
@H_502_3@
第二步:在 Python 3.5.3 下编译 Open CV
1》进opencv当前目录
cd /home/ljh/opencv
mkdir build@H_502_3@
3》进入编译输出路径
cd build@H_502_3@ 4》配置编译变量
cmake -D CMAKE_BUILD_TYPE=RELEASE \@H_502_3@ -D CMAKE_INSTALL_PREFIX=/usr/local \@H_502_3@ -D PYTHON3INTERP_FOUND=/usr/local/bin/python3.5 \@H_502_3@ -D PYTHON3_EXECUTABLE=/usr/local/bin/python3.5 \@H_502_3@ -D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.5/site-packages \@H_502_3@ -D PYTHON3_LIBRARY=/usr/local/lib/libpython3.5m.so \@H_502_3@ -D PYTHON3LIBS_FOUND=/usr/local/lib/libpython3.5m.so \@H_502_3@ -D PYTHON3_INCLUDE_DIR=/usr/local/include/python3.5m \@H_502_3@ -D PYTHON3_INCLUDE_PATH=/usr/local/include/python3.5m \@H_502_3@ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/site-packages/numpy/core/include \@H_502_3@ -D INSTALL_C_EXAMPLES=ON \@H_502_3@ -D INSTALL_PYTHON_EXAMPLES=ON \@H_502_3@ -D BUILD_EXAMPLES=ON \@H_502_3@ -D BUILD_opencv_python3=ON \@H_502_3@ -D OPENCV_EXTRA_MODULES_PATH=/home/ljh/opencv_contrib/modules ..@H_502_3@
@H_502_3@
!!!!配置变量非常关键,根据具体文件实际路径选择
##cmake的配置 一定要写明@H_502_3@ PYTHON3_INCLUDE_PATH@H_502_3@ PYTHON3_NUMPY_INCLUDE_DIRS@H_502_3@ 这两个变量,否则不会编译出所需要的python3 lib库@H_502_3@
@H_502_3@
5》开始编译@H_502_3@
make -j && make install (为了显著加快编译这里 可以: make -j8 意思是8核编译,根据自己机器来)@H_502_3@
@H_502_3@
6》验证编译完成@H_502_3@
如果编译成功,会在以下路径看到python3对应的lib库 cv2.cpython-35m-x86_64-linux-gnu.so
@H_502_3@
@H_502_3@
@H_502_3@
第三步:把编译出来的库替换 由方法一 ‘pip3 install opencv-python’ 生成的对应路径的lib库@H_502_3@
@H_502_3@
进入python3.5重新测试,是否可以使用,import cv2。经过测试目前,方法一出现的问题也解决了。测试代码成功。
@H_502_3@
@H_502_3@
步骤三:遇到的问题以及如何解决
<问题1>
在步骤二的时候,一开始用的 pip3直接安装opencv-python的方式,但是在运行测试代码 这句的时候cv2.namedWindow的时候,报了如下的错误,信息如下:
@H_502_3@
这个问题网上大多数的解决方法如下:
@H_502_3@
这里我按照网上方法卸载opencv-python,然后安装了依赖库 pkg-config,libgtk2.0-dev,然后再重新安装opencv-python,还是没有效果,后来我又测试了一个全新的ubuntu的环境,同样的安装正常,但还是到运行的时候报错。网络上可以查到的方法都没有效果。这里依赖库如下,就是 ‘步骤一 ’ 中已经安装的<2><5>,
<2>安装从源码构建 Open CV 的相关工具@H_502_3@
sudo apt-get install build-essential git cmake pkg-config@H_502_3@
<5>GTK,给图形界面操作用的
sudo apt-get install libgtk2.0-dev
@H_502_3@解决方法:
使用 ‘步骤二’ 中的第二种 <2>OpenCV源码下载编译安装 方法,从源码中重新生成新的python3.5 可以使用的lib库,替换之前由pip3 install opencv-python指令来安装的对应路径的lib库。参考前面'步骤二',有具体步骤。
@H_502_3@
@H_502_3@
<问题2>
下载编译opencv-3.2.0的时候网络原因导致第三方库ippicv下载不下来,编译报错
@H_502_3@
解决方法:
这里可以用本文开头提供的已经下载好的ippicv_linux_20151201.tgz 文件直接放在以下路径下,再重新编译
我这里的路径如下:
opencv/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz@H_502_3@
@H_502_3@
<问题3>
没有编译出所需要的python3 lib库cv2.cpython-35m-x86_64-linux-gnu.so@H_502_3@
@H_502_3@
原因:还是在前面的编译的配置cmake 有问题,能否编译出python3能用的lib库,取决于这个文件
在opencv中 opencv/modules/python/python3目录下文件CMakeLists.txt中 有如下提示。
-----------------------------------------------------------@H_502_3@ if(NOT PYTHON3_INCLUDE_PATH OR NOT PYTHON3_NUMPY_INCLUDE_DIRS)####注意这两个@H_502_3@ ocv_module_disable(python3)@H_502_3@ endif()@H_502_3@ @H_502_3@ @H_502_3@ set(the_description "The python3 bindings")@H_502_3@ set(MODULE_NAME python3)@H_502_3@ set(MODULE_INSTALL_SUBDIR python3)@H_502_3@ @H_502_3@ @H_502_3@ set(PYTHON PYTHON3)@H_502_3@ @H_502_3@ @H_502_3@ include(../common.cmake)@H_502_3@ @H_502_3@ @H_502_3@ unset(MODULE_NAME)@H_502_3@ unset(MODULE_INSTALL_SUBDIR)@H_502_3@ -----------------------------------------------------------@H_502_3@ ##所以前面cmake的配置 一定要写明,以下的两个变量。如果没有注明。默认就不会编译出lib库的。@H_502_3@ PYTHON3_INCLUDE_PATH@H_502_3@ PYTHON3_NUMPY_INCLUDE_DIRS@H_502_3@ #################################################################################@H_502_3@
@H_502_3@
其它的变量这里做下解释:
-D CMAKE_INSTALL_PREFIX=/usr/local \
##默认设置,直接写@H_502_3@ -D PYTHON3INTERP_FOUND=/usr/local/bin/python3.5 \
##用的是哪个python3,必须指明@H_502_3@ -D PYTHON3_EXECUTABLE=/usr/local/bin/python3.5 \
##用的是哪个python3,必须指明@H_502_3@ -D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.5/site-packages \
##python3安装其它包文件的安放路径@H_502_3@ -D PYTHON3_LIBRARY=/usr/local/lib/libpython3.5m.so \
##python3.5对应的共享库文件,在编译安装python3.5的时候需要使用指令./configure -enable-shared ,否者会找不到这个文件@H_502_3@ -D PYTHON3LIBS_FOUND=/usr/local/lib/libpython3.5m.so \
##同上@H_502_3@ -D PYTHON3_INCLUDE_DIR=/usr/local/include/python3.5m \@H_502_3@ -D PYTHON3_INCLUDE_PATH=/usr/local/include/python3.5m \
##都是python3.5安装后对应包含的头文件路径@H_502_3@ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/site-packages/numpy/core/include \
##依赖库numpy后对应包含的头文件路径@H_502_3@ -D INSTALL_C_EXAMPLES=ON \@H_502_3@ -D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON \
##这三个没有也可以。@H_502_3@ -D BUILD_opencv_python3=ON \
##是否编译python3需要的库,似乎没什么用@H_502_3@ -D OPENCV_EXTRA_MODULES_PATH=/home/ljh/opencv_contrib/modules ..@H_502_3@
##外部opencv_contrib的路径