在Ubuntu16.04安裝OpenCV3.1並實現USB攝像頭影象採集
硬體平臺: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做影象處理,可以使顯著提高程式設計效率。可以到
- UVC攝像頭簡介
採用UVC(USB Video Class)攝像頭的原因是:UVC是一個開放的標準,擁有維護良好的驅動,它屬於核心程式碼的一部分。插入攝像頭後就可以工作,而無須編譯或安裝額外的驅動。那麼問題來了,如何檢視自己手中的USB攝像頭是否是UVC攝像頭的方法如下:
(1)在終端輸入lsusb,檢視該攝像頭的ID號;
或者
在windows 7的環境下,檢視攝像頭ID號,如圖:
從圖中可知道,攝像頭的ID號為 VID2232,PID1028
(2)在網站http://www.ideasonboard.org/uvc/
(3)很遺憾,這個筆記本自帶的攝像頭,沒有在列表中找到。估計沒法使用,沒關係,這個我們先放一放。實在不行我們還另外一個攝像頭。說到這裡,突然想起,我用的虛擬機器,裝置的識別需要在虛擬機器的介面時,插入裝置,系統才會識別成虛擬機器的裝置,否則會裝置成windows的裝置,想想用自帶攝像頭看來是不行,因為攝像頭沒有辦法插拔。只有另外找攝像頭了。
二、安裝OpenCV
- 預備工作:
(1)安裝交叉編譯工具,安裝包為:arm-2009q3.tar,可以在360雲盤下載。https://yunpan.cn/Oc6gfCS3UgXtu5
(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
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 1.2.54)
-- TIFF: /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 - 4.0.6)
-- JPEG 2000: /usr/lib/x86_64-linux-gnu/libjasper.so (ver 1.900.1)
-- OpenEXR: /usr/lib/x86_64-linux-gnu/libImath.so /usr/lib/x86_64-linux-gnu/libIlmImf.so /usr/lib/x86_64-linux-gnu/libIex.so /usr/lib/x86_64-linux-gnu/libHalf.so /usr/lib/x86_64-linux-gnu/libIlmThread.so (ver 2.2.0)
-- GDAL: NO
--
-- Video I/O:
-- DC1394 1.x: NO
-- DC1394 2.x: YES (ver 2.2.4)
-- FFMPEG: YES
-- codec: YES (ver 56.60.100)
-- format: YES (ver 56.40.101)
-- util: YES (ver 54.31.100)
-- swscale: YES (ver 3.1.101)
-- resample: NO
-- gentoo-style: YES
-- GStreamer: NO
-- OpenNI: NO
-- OpenNI PrimeSensor Modules: NO
-- OpenNI2: NO
-- PvAPI: NO
-- GigEVisionSDK: NO
-- UniCap: NO
-- UniCap ucil: NO
-- V4L/V4L2: Using libv4l1 (ver 1.10.0) / libv4l2 (ver 1.10.0)
-- XIMEA: NO
-- Xine: NO
-- gPhoto2: NO
--
-- Parallel framework: TBB (ver 4.4 interface 9002)
--
-- Other third-party libraries:
-- Use IPP: 9.0.1 [9.0.1]
-- at: /home/js/opencv/opencv-3.1.0/3rdparty/ippicv/unpack/ippicv_lnx
-- Use IPP Async: NO
-- Use VA: NO
-- Use Intel VA-API/OpenCL: NO
-- Use Eigen: YES (ver 3.2.92)
-- Use Cuda: NO
-- Use OpenCL: YES
-- Use custom HAL: NO
--
-- OpenCL:
-- Version: dynamic
-- Include path: /home/js/opencv/opencv-3.1.0/3rdparty/include/opencl/1.2
-- Use AMDFFT: NO
-- Use AMDBLAS: NO
--
-- Python 2:
-- Interpreter: /usr/bin/python2.7 (ver 2.7.12)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.12)
-- numpy: /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.11.0)
-- packages path: lib/python2.7/dist-packages
--
-- Python 3:
-- Interpreter: /usr/bin/python3 (ver 3.5.2)
--
-- Python (for build): /usr/bin/python2.7
--
-- Java:
-- ant: /usr/bin/ant (ver 1.9.6)
-- JNI: /usr/lib/jvm/default-java/include /usr/lib/jvm/default-java/include/linux /usr/lib/jvm/default-java/include
-- Java wrappers: YES
-- Java tests: YES
--
-- Matlab: Matlab not found or implicitly disabled
--
-- Documentation:
-- Doxygen: NO
-- PlantUML: NO
--
-- Tests and samples:
-- Tests: YES
-- Performance tests: YES
-- C/C++ Examples: YES
--
-- Install path: /usr/local
--
-- cvconfig.h is in: /home/js/opencv/opencv-3.1.0/build
-- -----------------------------------------------------------------
我發現,其實在opencv-3.1.0目錄中輸入:
cmake .
也就是說不用輸入後面的那一長串巨集定義開關。也可以編譯,由於這裡使用的是cmake . 所以最終配置的檔案會在opencv-3.1.0目錄下,如果在build目錄下,是否會成功呢??你可以試一下,請留言告訴我結果吧。感謝!!!
區別在於:
– cvconfig.h is in: /home/js/opencv/opencv-3.1.0/build
在以上的配置列表中,觀察主要的依賴軟體都已配置到位,如FFMPEG、QT、OPENGL和V4L2等,顯示須為YES。一下,核對了一下,這些確實已經配置到位。可以進行下一步了。編譯和安裝openCV3.1.0
配置總結:其實可以這樣在open目錄下,在解壓opencv3.1.0之前,可以新建一個目錄如下:
js@ubuntu:~/opencv/opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e$
然後把從我網盤或者網上下載的檔案ippicv_linux_20151201.tgz拷貝到當前目錄下。在opencv3.1.0目錄下新建build目錄。執行:cmake .. 就行啦。。。一下內容是copy的我實際操作的log。有點長,有耐心的的可以快速瀏覽一下:
js@ubuntu:~/opencv/opencv-3.1.0$ mkdir build
js@ubuntu:~/opencv/opencv-3.1.0$
js@ubuntu:~/opencv/opencv-3.1.0$ cd build/
js@ubuntu:~/opencv/opencv-3.1.0/build$ cmake ..
-- The CXX compiler identification is GNU 5.4.0
-- The C compiler identification is GNU 5.4.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
中間略去~~~~~~~
-- Performing Test HAVE_C_WERROR_ADDRESS
-- Performing Test HAVE_C_WERROR_ADDRESS - Success
--
-- GUI:
-- QT: NO
-- GTK+ 2.x: YES (ver 2.24.30)
-- GThread : YES (ver 2.48.1)
-- GtkGlExt: NO
-- OpenGL support: NO
-- 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 1.2.54)
-- TIFF: /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 - 4.0.6)
-- JPEG 2000: /usr/lib/x86_64-linux-gnu/libjasper.so (ver 1.900.1)
-- OpenEXR: /usr/lib/x86_64-linux-gnu/libImath.so /usr/lib/x86_64-linux-gnu/libIlmImf.so /usr/lib/x86_64-linux-gnu/libIex.so /usr/lib/x86_64-linux-gnu/libHalf.so /usr/lib/x86_64-linux-gnu/libIlmThread.so (ver 2.2.0)
-- GDAL: NO
--
-- Video I/O:
-- DC1394 1.x: NO
-- DC1394 2.x: YES (ver 2.2.4)
-- FFMPEG: YES
-- codec: YES (ver 56.60.100)
-- format: YES (ver 56.40.101)
-- util: YES (ver 54.31.100)
-- swscale: YES (ver 3.1.101)
-- resample: NO
-- gentoo-style: YES
-- GStreamer: NO
-- OpenNI: NO
-- OpenNI PrimeSensor Modules: NO
-- OpenNI2: NO
-- PvAPI: NO
-- GigEVisionSDK: NO
-- UniCap: NO
-- UniCap ucil: NO
-- V4L/V4L2: Using libv4l1 (ver 1.10.0) / libv4l2 (ver 1.10.0)
-- XIMEA: NO
-- Xine: NO
-- gPhoto2: NO
--
-- Parallel framework: pthreads
--
-- Other third-party libraries:
-- Use IPP: 9.0.1 [9.0.1]
-- at: /home/js/opencv/opencv-3.1.0/3rdparty/ippicv/unpack/ippicv_lnx
-- Use IPP Async: NO
-- Use VA: NO
-- Use Intel VA-API/OpenCL: NO
-- Use Eigen: YES (ver 3.2.92)
-- Use Cuda: NO
-- Use OpenCL: YES
-- Use custom HAL: NO
--
-- OpenCL:
-- Version: dynamic
-- Include path: /home/js/opencv/opencv-3.1.0/3rdparty/include/opencl/1.2
-- Use AMDFFT: NO
-- Use AMDBLAS: NO
--
-- Python 2:
-- Interpreter: /usr/bin/python2.7 (ver 2.7.12)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.12)
-- numpy: /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.11.0)
-- packages path: lib/python2.7/dist-packages
--
-- Python 3:
-- Interpreter: /usr/bin/python3 (ver 3.5.2)
--
-- Python (for build): /usr/bin/python2.7
--
-- Java:
-- ant: /usr/bin/ant (ver 1.9.6)
-- JNI: /usr/lib/jvm/default-java/include /usr/lib/jvm/default-java/include/linux /usr/lib/jvm/default-java/include
-- Java wrappers: YES
-- Java tests: YES
--
-- Matlab: Matlab not found or implicitly disabled
--
-- Documentation:
-- Doxygen: NO
-- PlantUML: NO
--
-- Tests and samples:
-- Tests: YES
-- Performance tests: YES
-- C/C++ Examples: NO
--
-- Install path: /usr/local
--
-- cvconfig.h is in: /home/js/opencv/opencv-3.1.0/build
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/js/opencv/opencv-3.1.0/build
弄完之後在確認一下是否成功???呀,好像不行呢??
好那我們重新
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 ..
如下情況:
js@ubuntu:~/opencv/opencv-3.1.0/build$ cd ..
js@ubuntu:~/opencv/opencv-3.1.0$ mkdir build
mkdir: cannot create directory ‘build’: File exists
js@ubuntu:~/opencv/opencv-3.1.0$ cd build
js@ubuntu:~/opencv/opencv-3.1.0/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 ..
-- Detected version of GNU GCC: 54 (504)
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found suitable version "1.2.8", minimum required is "1.2.3")
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.8")
-- Found OpenEXR: /usr/lib/x86_64-linux-gnu/libIlmImf.so
//中間略去~~~
-- 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 1.2.54)
-- TIFF: /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 - 4.0.6)
-- JPEG 2000: /usr/lib/x86_64-linux-gnu/libjasper.so (ver 1.900.1)
-- OpenEXR: /usr/lib/x86_64-linux-gnu/libImath.so /usr/lib/x86_64-linux-gnu/libIlmImf.so /usr/lib/x86_64-linux-gnu/libIex.so /usr/lib/x86_64-linux-gnu/libHalf.so /usr/lib/x86_64-linux-gnu/libIlmThread.so (ver 2.2.0)
-- GDAL: NO
--
-- Video I/O:
-- DC1394 1.x: NO
-- DC1394 2.x: YES (ver 2.2.4)
-- FFMPEG: YES
-- codec: YES (ver 56.60.100)
-- format: YES (ver 56.40.101)
-- util: YES (ver 54.31.100)
-- swscale: YES (ver 3.1.101)
-- resample: NO
-- gentoo-style: YES
-- GStreamer: NO
-- OpenNI: NO
-- OpenNI PrimeSensor Modules: NO
-- OpenNI2: NO
-- PvAPI: NO
-- GigEVisionSDK: NO
-- UniCap: NO
-- UniCap ucil: NO
-- V4L/V4L2: Using libv4l1 (ver 1.10.0) / libv4l2 (ver 1.10.0)
-- XIMEA: NO
-- Xine: NO
-- gPhoto2: NO
--
-- Parallel framework: TBB (ver 4.4 interface 9002)
--
-- Other third-party libraries:
-- Use IPP: