在这篇文章中,我们将一步步的完成OpenCV3(C++ 和 Python)在Ubuntu上的环境搭建。
( Python环境依托于Virtual Env来管理 ,方便你分隔不同的Python环境)
1. 更新Ubuntu软件包
sudo apt-get update
sudo apt-get upgrade
2. 安装系统所需库
# 移除之前的 x264的安装
sudo apt-get remove x264 libx264-dev
# 安装所需依赖
sudo apt-get install build-essential checkinstall cmake pkg-config yasm
sudo apt-get install git gfortran
sudo apt-get install libjpeg8-dev libjasper-dev libpng12-dev
# 如果你使用 Ubuntu 16.04
sudo apt-get install libtiff5-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
sudo apt-get install libxine2-dev libv4l-dev
sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt-get install qt5-default libgtk2.0-dev libtbb-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev
sudo apt-get install libvorbis-dev libxvidcore-dev
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install x264 v4l-utils
# 选择性安装
sudo apt-get install libprotobuf-dev protobuf-compiler
sudo apt-get install libgoogle-glog-dev libgflags-dev
sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
3. 下载OpenCV和OpenCV_contrib
3.1 下载OpenCV
cd ~
mkdir opencv3.4.0 && cd opencv3.4.0
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 3.4.0
cd ..
3.2 下载OpenCV_contrib
cd ~/opencv3.4.0
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 3.4.0
cd ..
4. 编译安装OpenCV和contrib(发布贡献包)
##### 新建目录 #####
cd ~/opencv3.4.0/opencv
mkdir build && cd build
##### 使用CMake #####
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D WITH_CUDA=ON \
-DENABLE_FAST_MATH=1 -DCUDA_FAST_MATH=1 -DWITH_CUBLAS=1
-D PYTHON_DEFAULT_EXECUTABLE=~/anaconda3/bin/python3 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=~/anaconda3/bin/python3 -D PYTHON3_INCLUDE_DIR=~/anaconda3/include/python3.5m -D PYTHON3_LIBRARY=~/anaconda3/lib/libpython3.5m.so.1.0 -D PYTHON_NUMPY_PATH=~/anaconda3/lib/python3.5/site-packages -D PYTHON_NUMPY_INCLUDE_DIRS=/path/to/anaconda3/lib/python3.5/site-packages/numpy/core/include
-D OPENCV_EXTRA_MODULES_PATH=~/opencv3.4.0/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..
##### 编译安装 #####
sudo make
sudo make install
sudo make install 执行完毕后OpenCV编译过程就结束了,下面我们需要将一个.so文件放入python3.5的site-packages中
##### 创建连接 #####
进入到~/opencv-3.4.0/build/lib/python3目录下将其中的cv2.cpython-35m-x86_64-linux-gnu.so复制到anaconda下。(如果是anaconda2就直接将cv2.so复制进去就可以了)
sudo cp cv2.cpython-35m-x86_64-linux-gnu.so /home/zya/anaconda3/lib/python3.5/site-packages/
然后改名sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
或者可以建立虚拟链接:
##### 创建虚拟连接 #####
# 查看cv2.so的安装位置
find /usr/local/lib/ -type f -name "cv2*.so"
# 可能输出如下
# Python2
/usr/local/lib/python2.7/dist-packages/cv2.so
/usr/local/lib/python2.7/site-packages/cv2.so
# Python3
/usr/local/lib/python3.5/dist-packages/cv2.cpython-35m-x86_64-linux-gnu.so
/usr/local/lib/python3.5/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so
# 连接cv2.so文件
##### For Python 2 #####
cd ~/.virtualenvs/py2/lib/python2.7/site-packages
ln -s /usr/local/lib/python2.7/dist-packages/cv2.so cv2.so
##### For Python 3 #####
cd ~/.virtualenvs/py3/lib/python3.5/site-packages
ln -s /usr/local/lib/python3.5/dist-packages/cv2.cpython-36m-x86_64-linux-gnu.so cv2.so
5. 接下来就需要配置一些OpenCV的编译环境,首先将OpenCV的库添加到路径,从而可以让系统找到。
sudo gedit /etc/ld.so.conf.d/opencv.conf
执行此命令后打开的可能是一个空白的文件,不需要在意这一点,只需要在文件末尾添加
/usr/local/lib
执行如下命令使刚才的配置路径生效
sudo ldconfig
配置bash
sudo gedit /etc/bash.bashrc
在打开的文件的末尾添加如下内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存之后,执行如下命令是的配置生效
source /etc/bash.bashrc
更新
sudo updatedb
至此所有的配置都已经完成,打开Python输入import cv2若没有报错则成功安装OpenCV。
6.测试自己版本
pkg-config --modversion opencv
如果输出自已安装的OpenCV版本,如3.4.0,说明OK啦。
我在import cv2时出现错误:
ImportError: /home/zy/anaconda3/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
解决方法:
1.查看当前版本号
strings /home/cyj/anaconda2/bin/../lib/libstdc++.so.6 | grep GLIBCXX
缺少3.4.21,所以装一个
conda install libgcc