最近感觉有点脑子不够用,学过的东西长期不用的话很快就会忘记,趁着这段时间把之前学的东西都整理下,也算是对之前的技术做个回顾和总结。
今天介绍如何在Ubuntu下安装Open CV + Python的开发环境。opencv是一个十分强大的图像处理以及机器视觉算法库,它支持Java,C++,以及Python。
目前可以在Android可以很轻松得搭建开发环境了,这个会在后续的文章中予以介绍,之所以选择Python是因为简单,花一个下午就就可以把常用的语法给过一遍了,但是后来发现深入进去还是有的学的,后续打算以OpenCV + python作为一个专题介绍下图像处理中的一些技术。

好了,进入正题:

  1. 首先运行下如下的命令,更新下软件库

    $ sudo apt-get update
    $ sudo apt-get upgrade
  2. 安装开发必要的工具,下面的这些,比如git 如果大家的系统上已经安装好了就不用安装了

    sudo apt-get install build-essential cmake git pkg-config
  3. 为了能够加载 JPEG, PNG, TIFF这些格式的图片,需要安装这些格式的图片读写包:

sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev
  1. 图像显示的话我这里选择的是 GTK 开发库,执行如下命令安装:

    sudo apt-get install libgtk2.0-dev
  2. 为了能够处理视频流我们需要安装如下的包:

    sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
  3. 下面这个不是很清楚,当时笔记上的,先装上吧:

    sudo apt-get install libatlas-base-dev gfortran

  4. 安装pip 是用于安装Python包的工具

    wget https://bootstrap.pypa.io/get-pip.py && sudo python get-pip.py 
  5. 使用上面安装的Pip 安装virtualenv,virtualenvwrapper这个有助于你创建独立的Python开发环境:

    sudo pip install virtualenv virtualenvwrapper
    export WORKON_HOME=$HOME/.virtualenvs
    source /usr/local/bin/virtualenvwrapper.sh
    source ~/.bashrc
  6. 创建一个独立的开发环境

    mkvirtualenv cv
  7. 安装Pyhon 2.7

    sudo apt-get install python2.7-dev
  8. 由于需要涉及到多维数组的运行所以需要使用pip 安装 numpy库

    pip install numpy
  9. 安装opencv 3.0

    cd ~
    git clone https://github.com/Itseez/opencv.git
    cd opencv
    git checkout 3.0.0
    cd ~
    git clone https://github.com/Itseez/opencv_contrib
    cd opencv_contrib
    git checkout 3.0.0
  10. 使用cmake编译opencv

    cd ~/opencv
    mkdir build
    cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D BUILD_EXAMPLES=ON ..
    make -j4

这时候有可能会报如下错误:

/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32 against `.rodata.str1.1’ can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make[2]: *** [lib/libopencv_videoio.so.3.0.0] Error 1
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make: *** [all] Error 2

这是由于你当时编译ffmpeg的时候方式不对,参考如下结合方法:

I had the same problem while compiling opencv3 alpha on Ubuntu 14.04 with FFMPEG enabled. My FFMPEG was the git version compiled with
./configure
make
sudo make install
I had to recompile FFMPEG with
./configure –enable-nonfree –enable-pic –enable-shared

That did the trick for me and after that opencv3 compiled fine.

Stackflow OpenCV make fails - “recompile with -fPIC”

在安装过程中还有可能会遇到如下错误:

/home/jimmy/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp: In member function ‘bool OutputMediaStream_FFMPEG::open(const char*, int, int, double)’:
/home/jimmy/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:2150:41: warning: ignoring return value of ‘int avformat_write_header(AVFormatContext*, AVDictionary**)’, declared with attribute warn_unused_result [-Wunused-result]
avformat_write_header(oc_, NULL);
^
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o] Error 1
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs….
Linking CXX shared library ../../lib/libopencv_shape.so
[ 47%] Built target opencv_shape
make: *** [all] Error 2

这是由于我在上面重装ffmpeg的时候安装的是最新的3.0版本导致部分方法不兼容,我这边ffmpeg安装回2.3版本就可以了

这时候还有可能发现在终端敲ffmpeg的时候会报如下错误:

ffmpeg: error while loading shared libraries: libavdevice.so.55: cannot open shared object file: No such file or directory

解决办法:
运行:

sudo vim /etc/ld.so.conf

在文件的最后添加

/usr/lib
/usr/local/lib

运行:

ldconfig
  1. 编好后就安装吧
sudo make install
sudo ldconfig

但是我们的cv虚拟环境是在我们的home目录下,所以要在虚拟环境下使用OpenCV,我们还得将opencv 链接到这个地方。

cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so
  1. 测试下:
$ workon cv
$ python
>>> import cv2
>>> cv2.__version__
'3.0.0'
Contents