参考文献:
http://bbs.elecfans.com/jishu_503398_1_1.html
帖子的主要内容就是在Ubuntu16.04上安装图像处理软件OpenCV,并用简单的程序实现UVC摄像头的图像采集
硬件平台:Windows7 64 bit + USB摄像头C270
软件平台:VMware® Workstation 12 Pro+ Ubuntu16.04 + arm-linux-gcc4.3.2 + OpenCV3.1
一、知识补充
1.什么是OpenCV
OpenCV是一款开源的图像处理库,于1999年由Intel公司发起和建立。OpenCV为Python、Matlab等多种计算机语言提供了接口,它的库函数采用了C和C++编写,可以在Windows、Linux、Mac OS和Android等多种操作系统上面运行。采用OpenCV做图像处理,可以使显著提高编程效率。可以到http://opencv.org/downloads.html下载需要的版本。
- UVC摄像头简介
采用UVC(USB Video Class)摄像头的原因是:UVC是一个开放的标准,拥有维护良好的驱动,它属于内核代码的一部分。插入摄像头后就可以工作,而无须编译或安装额外的驱动。那么问题来了,如何查看自己手中的USB摄像头是否是UVC摄像头的方法如下:
(1)在终端输入lsusb,查看该摄像头的ID号;
或者
在windows 7的环境下,查看摄像头ID号,如图:
从图中可知道,摄像头的ID号为 VID2232,PID1028
(2)在网站http://www.ideasonboard.org/uvc/中比对显示的ID号,若“Status”一栏为“绿色的对号”则表示该摄像头为UVC摄像头。
(3)很遗憾,这个笔记本自带的摄像头,没有在列表中找到。估计没法使用,没关系,这个我们先放一放。实在不行我们还另外一个摄像头。说到这里,突然想起,我用的虚拟机,设备的识别需要在虚拟机的界面时,插入设备,系统才会识别成虚拟机的设备,否则会设备成windows的设备,想想用自带摄像头看来是不行,因为摄像头没有办法插拔。只有另外找摄像头了。
二、安装OpenCV
- 预备工作:
(1)安装交叉编译工具,安装包为:arm-2009q3.tar,可以在360云盘下载。https://yunpan.cn/Oc6gfCS3UgXtu5 访问密码 77bd
(2)安装cmake。在终端输入安装指令:
- 预备工作:
sudo apt-get install cmake
待完成安装后,在终端输入以下指令,可以查看安装cmake的版本信息。
cmake --version
cmake version 3.5.1
可以看到:
- 安装步骤:
(1)更新和升级系统,两条语句后分开执行。在更新之前最好见更新的镜像服务器设置成国内的网址。我查了一下,记得可以设置成163的镜像服务器,现在没有了,就设置成了搜狐的镜像,这样比美国的服务器,更新速度要快很多。如果读者不知道如何设置镜像服务器,可以百度搜索一下方法,实在不行,留言给我,我可以提供方法,后续我会在博客里写一下如何设置。
注:如果你是新安装的系统,重来没有更新过,如果会消耗很长的时间。。。请耐心等待期更新完毕,再进行后面的步骤。
sudo apt-get update
sudo apt-get upgrade
(2)安装依赖项
sudo apt-get install pkg-config libgtk2.0-dev build-essential libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev python-dev python-numpy python-tk libtbb-dev libeigen3-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev
(3)下载并解压OpenCV3.1.0至Ubuntu16.04的用户目录下
cd ~
wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/3.1.0/opencv-3.1.0.zip
unzip opencv-3.1.0.zip
cd opencv-3.1.0
下载很慢,你可以到我网盘试试:
(4)OpenCV 2.0之后的版本,必须使用CMake创建Makefile。我使用的CMake版本是3.5.1。最后的两个点“..”的意思是:当前目录在build文件夹里,所以在编译的时候需要回到OpenCV的主菜单。
mkdir build
cd build
cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_VTK=ON ..
1.运行上的指令时出现如下错误:
js@ubuntu:~/opencv/opencv-3.1.0/build/build$ cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_VTK=ON ..
CMake Error: The source directory "/home/js/opencv/opencv-3.1.0/build" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
查各种原因,出现这个错误提示的原因是CMakeLists.txt 不在/home/js/opencv/opencv-3.1.0/build路径中,咨询一看,我晕菜,居然在build下面还建了一个build文件夹,rm -r build后,在上一层的build中再次输入上面的命令,又在build的下一层新建了一个build文件夹,出现同样的错误,看来不是我的笔误造成的两层文件夹,而是它自动新建了一个build文件夹,怎么回事,之前我在另外一个虚拟机都没有自动新建一个文件夹的啊。。。搞不懂,先不管他,既然他要自动新建build文件夹,那么我事先就不建build文件夹了。。直接在/home/js/opencv/opencv-3.1.0/运行上面同样的命令。哈哈,开始配置了。。。
但是又出错了:
重新把上面的 sudo apt-get update 和sudo apt-get upgrade,执行一遍,第一个没问题,第二个居然出错了。问题如下:
libtiff5-dev:i386 libtiff5-dev
E: Package ‘libtiff4-dev’ has no installation candidate
http://installion.co.uk/ubuntu/vivid/main/l/libtiff5-dev/install/index.html
输入:
sudo apt-get install libtiff5-dev
还是不管用,仔细阅读提示,发现是libtiff4-dev无效了,没有了,用libtiff5-dev 代替了。好了,重新执行依赖,并将其中的libtiff4-dev 该为libtiff5-dev。好了,开始下载了。。。
– Checking for module ‘tbb’
– Found tbb, version 4.4~20151115
– ICV: Downloading ippicv_linux_20151201.tgz… 这个地方等待下载了,据之前的经验,这里下载的东西的校验值会出问题,导致配置不成功。。。
没关系,从网上先下载ippicv_linux_20151201.tgz 在放到它应该的目录下就行了。。。写完这段话,还在下载,不知道会不会成功呢。。OK,该来还是会来:
CMake Error at 3rdparty/ippicv/downloader.cmake:77 (message):
ICV: Failed to download ICV package: ippicv_linux_20151201.tgz.
Status=28;”Timeout was reached”
Call Stack (most recent call first):
3rdparty/ippicv/downloader.cmake:110 (_icv_downloader)
cmake/OpenCVFindIPP.cmake:237 (include)
cmake/OpenCVFindLibsPerf.cmake:12 (include)
CMakeLists.txt:537 (include)
– Configuring incomplete, errors occurred!
See also “/home/js/opencv/opencv-3.1.0/build/CMakeFiles/CMakeOutput.log”.
See also “/home/js/opencv/opencv-3.1.0/build/CMakeFiles/CMakeError.log”.js@ubuntu:~/opencv/opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e$ ls
ippicv_linux_20151201.tgz
进入上面的目录,并且删除“ippicv_linux_20151201.tgz”,将下载的文件cp到这个这个地方。重新在build目录下输入配置命令:。
(实在百度不到这个文件,可以去我的网盘下载:
1.ippicv_linux_20141027.tgz”:
https://yunpan.cn/Oc6gRzCihpQGXc 访问密码 a25d
2.ippicv_linux_20151201.tgz”
https://yunpan.cn/Oc6sYbdKLc7uRX 访问密码 a6b0)
运行cmake的时候,会在终端出现依赖项的配置列表如下:
--
-- OpenCV modules:
-- To be built: core flann imgproc ml photo video viz imgcodecs shape videoio highgui objdetect superres ts features2d calib3d java stitching videostab python2
-- Disabled: world
-- Disabled by dependency: -
-- Unavailable: cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev python3
--
-- GUI:
-- QT 4.x: YES (ver 4.8.7 EDITION = OpenSource)
-- QT OpenGL support: YES (/usr/lib/x86_64-linux-gnu/libQtOpenGL.so)
-- OpenGL support: YES (/usr/lib/x86_64-linux-gnu/libGLU.so /usr/lib/x86_64-linux-gnu/libGL.so)
-- VTK support: YES (ver 5.10.1)
--
-- Media I/O:
-- ZLib: /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.8)
-- JPEG: /usr/lib/x86_64-linux-gnu/libjpeg.so (ver )
-- WEBP: build (ver 0.3.1)
-- PNG: /usr/lib/x86_64-linux-gnu/libpng.so (ver