一 OpenCV简要介绍
OpenCV是一个开源的计算机视觉库,可以运行在Linux、Windows和Mac等操作系统上,其底层为C/C++语言编写目前支持的语言借口有:
- C/C++
- Python
- Matlab等等
该库使用方便,用户根据开发语言需要配置好语言环境即可
1.1 opencv源码安装总体步骤概览:
即采用编译安装软件项目的方式来处理:
二 源码下载
a. 可以从OpenCV官网直接下载:
http://opencv.org/downloads.html
b.也可以从github上clone:
比如工作目录为myopencv即,
cd ~/myopencv
git clone https://github.com/Itseez/opencv.git
git clone https://github.com/Itseez/opencv_contrib.git
三 编译环境安装
3.1 依赖包安装
打开shell终端,键入:
sudo apt-get install libopencv-dev build-essential cmake git libprotobuf-dev
sudo apt-get install libgtk2.0-dev pkg-config python-dev python-numpy
sudo apt-get install libsnappy-dev gtk+-3.0 yasm Doxygen
sudo apt-get install libdc1394-22 libopenblas-dev liblmdb-dev
sudo apt-get install libdc1394-22-dev libjpeg-dev libpng12-dev libtiff4-dev
sudo apt-get install libjasper-dev libhdf5-serial-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libxine-dev
sudo apt-get install libgstreamer0.10-dev libgflags-dev
sudo apt-get install libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev
sudo apt-get install libqt4-dev libfaac-dev libgoogle-glog-dev
sudo apt-get install libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install libtheora-dev libvorbis-dev protobuf-compiler liblapack-dev
sudo apt-get install libxvidcore-dev x264 v4l-utils unzip liblapacke-dev
sudo apt-get install libavresample-dev libgphoto2-dev libavutil-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
3.2 ffmpeg安装
ffmpeg是一个开源的处理视频的软件
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
sudo apt-get update
sudo apt-get install ffmpeg
四 编译
4.1 命令参考编译安装方法
首先在myopencv目录下的opencv目录中建立build文件夹,
cd myopencv/opencv
mkdir build
假如不加入contrib模块
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON ..
假如要加入contrib模块,那么:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/ -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=~/myopencv/opencv_contrib/modules/ ~/myopencv/opencv
当上述cmake命令执行后,会自动下载编译所需的第三方包,等待即可,包括ippcv等。
4.2 cmake 图形化界面(cmake-gui)编译
可以参考网址:http://blog.csdn.net/jay463261929/article/details/53197228
五 安装
5.1 生成可执行文件安装
采用make -j $(nproc)命令—-j后面跟的参数为参与编译的CPU核数
make -j4
sudo make install
5.2 设置opencv位置
执行下面命令即可
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
sudo apt-get update
六 测试
以python为例,在python命令行中输入:
import cv2
显示正确即可
七 编译错误调试
7.1 缺少xxx.h文件
缺少xxx.h文件安装方法——————到/usr/include/目录下面查找类似的文件
下面是两个例子(前提是安装好相关依赖包,根据缺少的.h文件寻找需要的包)
例1:缺少videodev.h————linux/videodev.h not found
执行下面命令
sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
例2:缺少videoio.h————sys/videoio.h not found
执行下面命令
sudo cp /usr/include/opencv2/videoio/videoio_c.h /usr/include/x86_64-linux-gnu/sys
sudo ln -s /usr/include/x86_64-linux-gnu/sys/videoio_c.h /usr/include/x86_64-linux-gnu/sys/videoio.h
7.2 /usr/bin/ld: cannot find -l****问题的解决办法
在ubuntu下编译C或cpp文件时,可能会出现找不到链接库的问题,其形式为:
cannot find -l****
这里的**一般是指的链接库,
既然是lib文件链接有问题,简单了。这种情况分两种
在usr/lib目录下有这些库文件
直接修复以下链接即可,例如依次执行
ln -s lib***.so.6(某个数字) lib***.so
即可
在usr/lib目录下没有这些文件
直接在系统根目录中依次搜索这些库文件,并使用
sudo cp 库文件名 /usr/lib
命令将相应库文件拷贝到该目录中即可
7.3 缺少lippicv
将opencv-3.x源码包下面的3rdparty下面的ippicv的unpack里面的ippicv_lnx里面的lib的intel64文件夹里面的libippicv.a拷贝到/usr/local/lib下面
7.4 opencv error: ‘NppiGraphcutState‘ has not been declared
如:
错误:/home/usrname/OpenCV-3.1.0/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState‘ has not been declared
typedef NppStatus (init_func_t)(NppiSize oSize, NppiGraphcutState* ppStat
^
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:135:18: error: ‘NppiGraphcutState‘ does not name a type
operator NppiGraphcutState*()
^
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:141:9: error: ‘NppiGraphcutState‘ does not name a type
NppiGraphcutState* pState;
…….
解决方案:
如opencv-3.1.0版本
进入opencv-3.1.0/modules/cudalegacy/src/目录,修改graphcuts.cpp文件,将:
#include "precomp.hpp"
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改为
#include "precomp.hpp"
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
其他版本修改修改graphcuts.cpp文件即可。
然后make编译就可以了
参考文献和书目
【1】http://blog.csdn.net/jay463261929/article/details/53197228
【2】http://blog.csdn.net/lemianli/article/details/73614453
【3】Gary Byadski等著.《学习opencv》.清华大学出版社
【4】Jan Erik Solem 著.《Python计算机视觉编程》.人民邮电出版社