一、OpenCV介紹 1.1 OpenCV-Python教程簡介 OpenCV由 Gary Bradsky 于1999年在英特爾創(chuàng)立,第一個版本于2000年發(fā)布。 Vadim Pisarevsky 加入了Gary Bradsky,管理英特爾的俄羅斯軟件OpenCV團隊。2005年,OpenCV被用于
OpenCV由 Gary Bradsky 于1999年在英特爾創(chuàng)立,第一個版本于2000年發(fā)布。 Vadim Pisarevsky 加入了Gary Bradsky,管理英特爾的俄羅斯軟件OpenCV團隊。2005年,OpenCV被用于斯坦利,這輛車贏得了2005年DARPA大挑戰(zhàn)賽。
后來,在Willow Garage的支持下,由Gary Bradsky和Vadim Pisarevsky領導該項目,繼續(xù)積極發(fā)展。OpenCV現在支持與計算機視覺和機器學習相關的多種算法,并且正在日益擴展。
OpenCV支持多種編程語言,如C++、Python、Java等,并且可在包括Windows、Linux、OS X、Android和iOS的不同平臺上使用。基于CUDA和OpenCL的高速GPU操作接口也在積極開發(fā)中。
OpenCV-Python是OpenCV的Python API,結合了OpenCV C++ API和Python語言的最佳品質。
OpenCV-Python是一個Python綁定庫,旨在解決計算機視覺問題。
Python是一種通用編程語言,由 Guido van Rossum 創(chuàng)立,很快就變得非常流行,主要是因為它的簡單性和代碼可讀性。它使程序員能夠在不降低可讀性的情況下用更少的代碼行表達思想。
與C/C++等語言相比,Python更慢。也就是說,Python可以很容易地用C/C++擴展,這允許我們用C/C++編寫計算密集型代碼,并創(chuàng)建可以用作Python模塊的Python包裝器。
這給我們帶來了兩個優(yōu)勢:首先,代碼與原始C/C++代碼一樣快(因為它是在后臺工作的實際C++代碼),其次,用Python編寫代碼比C/C++更容易。OpenCV-Python是原始OpenCV C++實現的Python包裝器。
OpenCV-Python使用了Numpy,這是一個高度優(yōu)化的庫,用于使用MATLAB風格的語法進行數值運算。所有OpenCV數組結構都可以轉換為Numpy數組。這也使得它更容易與其他使用Numpy的庫集成,如SciPy和Matplotlib。
OpenCV引入了一組新的教程,將指導您完成OpenCV-Python中可用的各種函數。 本指南主要關注OpenCV 3.x版本 (盡管大多數教程也適用于OpenCV 2.x)。
建議先了解Python和Numpy,因為本指南不會涉及它們。 熟練使用Numpy是使用OpenCV-Python編寫優(yōu)化代碼的必要條件 。
本教程最初由Abid Rahman K.作為Google Summer of Code 2013計劃的一部分,由Alexander Mordvintsev指導。
由于OpenCV是一個開源項目,歡迎所有人為庫、文檔和教程做出貢獻。
如果您在本教程中發(fā)現任何錯誤(從小的拼寫錯誤到代碼或概念中的嚴重錯誤),請隨時通過在GitHub中克隆的OpenCV并提交pull請求來糾正它。OpenCV開發(fā)人員將檢查您的pull請求,給予您重要的反饋,并且(一旦通過審核者的批準)它將被合并到OpenCV中。您將成為一名開源貢獻者 ?
隨著新模塊被添加到OpenCV-Python中,本教程將不得不進行擴展。如果你熟悉某個特定的算法,并且可以寫一個教程,包括算法的基本理論和示例使用的代碼,請這樣做。
請記住,我們 一起 可以使這個項目取得巨大成功!
下面是向OpenCV-Python提交教程的貢獻者列表。
在本教程中
以下步驟在Windows 7-64位計算機上使用Visual Studio 2010和Visual Studio 2012進行測試。屏幕截圖顯示VS 2012。
下面的Python包將被下載并安裝到它們的默認位置。
pip install numpy
命令)。
pip install matplotlib
)(Matplotlib是可選的,但推薦使用,因為我們在教程中經常使用它)。
將所有軟件包安裝到它們的默認位置。如果是Python 2.7,Python將安裝到
C:/Python27/
。
安裝完成后,打開Python IDLE。輸入
import numpy
并確保Numpy工作正常。
從 GitHub 或 SourceForge 網站下載最新的OpenCV版本,然后雙擊將其解壓縮。
轉到 opencv/build/python/2.7 文件夾。
將 cv2.pyd 復制到 C:/Python 27/lib/site-packages 。
將 opencv_world.dll 文件復制到 C:/Python 27/lib/site-packages 。
打開Python IDLE,在Python終端中輸入以下代碼。
>>> import cv2 as cv
>>> print( cv.__version__ )
如果結果打印出來沒有任何錯誤,恭喜!您已成功安裝OpenCV-Python。
下載并安裝Visual Studio和CMake。
下載必要的Python包并將其安裝到默認位置。
注意:
在本例中,我們使用Python包的32位二進制文件。但是如果你想在x64上使用OpenCV,需要安裝Python包的64位二進制文件。問題是,Numpy沒有官方的64位二進制文件。你得靠自己的力量。
為此,您必須使用與構建Python相同的編譯器。當你啟動Python IDLE時,它會顯示編譯器的詳細信息。你可以在這里獲得更多信息。因此,您的系統必須具有相同的Visual Studio版本,并從源代碼構建Numpy。
另一種獲得64位Python包的方法是使用來自第三方的現成Python發(fā)行版,如Anaconda,Enthought等,它會更大,但會有你需要的一切。一切都在shell中。您也可以下載32位版本。
確保Python和Numpy工作正常。
下載OpenCV源代碼。它可以來自 Sourceforge (官方發(fā)布版本)或 Github (最新來源)。
將其解壓縮到一個文件夾opencv,并在其中創(chuàng)建一個新的文件夾。
打開CMake-gui( Start > All Programs > CMake-gui )
按如下方式填寫字段(參見下圖):
您將看到所有字段都標記為紅色。點擊 WITH 字段將其展開。它決定了你需要什么額外的功能。因此,標記適當的字段。請參見下圖:
現在單擊 BUILD 字段展開它。前幾個字段配置構建方法。請參見下圖:
其余字段指定要構建的模塊。由于OpenCV-Python還不支持GPU模塊,因此您可以完全避免它以節(jié)省保存時間(但如果您使用它們,請保留它)。請參見下圖:
現在單擊 ENABLE 字段將其展開。確保 ENABLE_SOLUTION_FOLDERS 未選中(Visual Studio Express版不支持解決方案文件夾)。請參見下圖:
另外,請確保在 PYTHON 字段中,所有內容都已填充。(忽略PYTHON_DEBUG_LIBRARY)。見下圖:
最后點擊 Generate 按鈕。
現在轉到我們的 opencv/build 文件夾。在那里你會發(fā)現 OpenCV.sln 文件。用Visual Studio打開它。
將構建模式檢查為 Release 而不是 Build 。
在解決方案資源管理器中,右鍵單擊 Solution (或 ALL_BUILD )并構建它。這將需要一些時間才能完成(16)。
再次右鍵單擊OpenCV-Python并構建它,F在OpenCV-Python將被安裝(17)。
打開Python IDLE并輸入“import cv 2 as cv”。如果沒有錯誤,則說明安裝正確。
注意:
我們所安裝的沒有其他支持,如TBB,Eigen,Qt,文檔等。解釋它在這里是很難的。我們很快就會添加更詳細的視頻,或者您可以直接在附近進行黑客操作。
如果你有一臺windows機器,從源代碼編譯OpenCV,進行各種破解。如果您遇到任何問題,請訪問OpenCV論壇并解釋您的問題。
在本教程中
OpenCV-Python可以通過兩種方式安裝在Fedora中:
另一個重要的事情是需要額外的庫。OpenCV-Python只需要 Numpy (除了其他依賴項,我們將在后面看到)。但在本教程中,我們也使用 Matplotlib 來實現一些簡單而漂亮的繪圖目的(與OpenCV相比,我感覺好多了)。Matplotlib是可選的,但強烈推薦。同樣,我們還將看到 IPython ,一個交互式Python終端,這也是強烈推薦的。
以root用戶身份在終端中使用以下命令安裝所有軟件包。
$ yum install numpy opencv*
打開Python IDLE(或IPython),在Python終端中輸入以下代碼。
>>> import cv2 as cv
>>> print( cv.__version__ )
如果結果打印出來沒有任何錯誤,恭喜!您已成功安裝OpenCV-Python。
這很容易,但有一個問題。Yum倉庫可能不總是包含最新版本的OpenCV。例如,在編寫本教程時,yum存儲庫包含2.4.5,而最新的OpenCV版本是2.4.6。關于Python API,最新版本總是包含更好的支持。
此外,還可能會出現相機支持,視頻播放等問題,這取決于驅動程序、ffmpeg、gstreamer軟件包等。
所以我個人傾向于下一種方法,即從源代碼編譯。同樣在某個時候,如果你想為OpenCV做貢獻,你會需要這個。
從源代碼編譯可能看起來有點復雜,但一旦你成功了,就沒有什么復雜的了。
首先,我們將安裝一些依賴項。有些是強制的,有些是可選的。可選的依賴項,如果你不需要,可以不填。
我們需要CMake來配置安裝,GCC用于編譯,Python-devel和Numpy用于創(chuàng)建Python擴展等。
yum install cmake
yum install python-devel numpy
yum install gcc gcc-c++
接下來,我們需要GTK支持GUI功能、camera(libdc1394,v4l)和vedio(ffmpeg,gstreamer)等。
yum install gtk2-devel
yum install libdc1394-devel
yum install ffmpeg-devel yum install fmpeg-devel
yum install gstreamer-plugins-base-devel
以上依賴項足以在您的fedora機器中安裝OpenCV。但根據您的需求,您可能需要一些額外的依賴項。下面給出了此類可選依賴項的列表。您可以選擇安裝或不安裝它,由你決定 ?
OpenCV附帶了支持PNG,JPEG,JPEG 2000,TIFF,WebP等圖像格式的文件,但它可能有點舊。如果你想獲得最新的庫,你可以安裝這些格式的開發(fā)文件。
yum install libpng-devel
yum install libjpeg-turbo-devel
yum install jasper-devel
yum install openexr-devel
yum install libtiff-devel
yum install libwebp-devel
一些OpenCV函數通過英特爾的線程構建塊(TBB)并行化。但是如果你想啟用它,你需要先安裝TBB。(同樣,在使用CMake配置安裝時,不要忘記傳遞-D WITH_TBB= ON。更多細節(jié)見下文)
yum install tbb-devel
OpenCV使用另一個庫Eigen來優(yōu)化數學運算。因此,如果你的系統中安裝了Eigen,你就可以利用它。(同時,在配置CMake安裝時,不要忘記傳遞-D WITH_EIGEN= ON。更多細節(jié)見下文)
yum install eigen3-devel
如果你想建立文檔(是的,你可以在你的系統中用HTML創(chuàng)建OpenCV完整官方文檔的離線版本,并提供完整的搜索功能,這樣你就不需要總是訪問互聯網,如果有任何問題,它是相當快的。枰惭bDoxygen(文檔生成工具)。
yum install doxygen
接下來我們需要下載OpenCV。你可以從 sourceforge站點 下載OpenCV的最新版本。然后解壓縮文件夾。
或者你可以從OpenCV的github repo下載最新的源代碼(如果你想為OpenCV做貢獻,請選擇這個。它能讓你的OpenCV保持最新)。首先,你需要安裝 Git 。
yum install git
git clone https://github.com/opencv/opencv.git
它將在主目錄(或您指定的目錄)中創(chuàng)建一個文件夾OpenCV。克隆可能需要一些時間,具體取決于您的網絡連接。
現在打開一個終端窗口并導航到下載的OpenCV文件夾。創(chuàng)建一個新的構建文件夾并導航到它。
mkdir build
cd build
現在我們已經安裝了所有需要的依賴項,讓我們安裝OpenCV。安裝必須使用CMake進行配置。它指定要安裝的模塊、安裝路徑、要使用的附加庫、是否要編譯文檔和示例等。
下面的命令通常用于配置(從構建文件夾執(zhí)行)。
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
它指定構建類型為“Release Mode”,安裝路徑為 /usr/local。注意每個選項前的“-D”和最后的“..”。簡而言之,這是格式:
cmake [-D ] [-D ] ..
您可以指定任意多個標志,但每個標志前面都應該有-D。
因此,在本教程中,我們將使用TBB和Eigen支持安裝OpenCV。我們還構建文檔,但不包括性能測試和構建示例。我們還禁用了GPU相關模塊(因為我們使用OpenCV-Python,所以不需要GPU相關模塊,這節(jié)省了我們一些時間)。
以下所有命令都可以在一個cmake語句中完成,但為了更好地理解,這里將其拆分。
cmake -D WITH_TBB=ON -D WITH_EIGEN=ON ..
cmake -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF ..
cmake -D WITH_OPENCL=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF -D BUILD_opencv_gpucodec=OFF -D BUILD_opencv_gpufeatures2d=OFF -D BUILD_opencv_gpufilters=OFF -D BUILD_opencv_gpuimgproc=OFF -D BUILD_opencv_gpulegacy=OFF -D BUILD_opencv_gpuoptflow=OFF -D BUILD_opencv_gpustereo=OFF -D BUILD_opencv_gpuwarping=OFF ..
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
每次輸入cmake語句時,它都會打印出生成的配置設置。在你得到的最終設置中,確保以下字段已填寫(下面是我得到的配置的一些重要部分)。
這些字段也應該在您的系統中適當填寫。否則就出問題了。檢查你是否正確執(zhí)行了上述步驟。
...
-- GUI:
-- GTK+ 2.x: YES (ver 2.24.19)
-- GThread : YES (ver 2.36.3)
-- Video I/O:
-- DC1394 2.x: YES (ver 2.2.0)
-- FFMPEG: YES
-- codec: YES (ver 54.92.100)
-- format: YES (ver 54.63.104)
-- util: YES (ver 52.18.100)
-- swscale: YES (ver 2.2.100)
-- gentoo-style: YES
-- GStreamer:
-- base: YES (ver 0.10.36)
-- video: YES (ver 0.10.36)
-- app: YES (ver 0.10.36)
-- riff: YES (ver 0.10.36)
-- pbutils: YES (ver 0.10.36)
-- V4L/V4L2: Using libv4l (ver 1.0.0)
-- Other third-party libraries:
-- Use Eigen: YES (ver 3.1.4)
-- Use TBB: YES (ver 4.0 interface 6004)
-- Python:
-- Interpreter: /usr/bin/python2 (ver 2.7.5)
-- Libraries: /lib/libpython2.7.so (ver 2.7.5)
-- numpy: /usr/lib/python2.7/site-packages/numpy/core/include (ver 1.7.1)
-- packages path: lib/python2.7/site-packages
...
還有許多其他的標志和設置。這是留給你進一步探索。
現在你使用make命令構建文件,并使用make install命令安裝它。make install應該以root身份執(zhí)行。
make
su
make install
安裝結束了。所有文件都安裝在 /usr/local/ 文件夾中。但是要使用它,你的Python應該能夠找到OpenCV模塊。你有兩個選擇
import sys; print(sys.path)
可以找到Python路徑。它將打印出許多位置。將 /usr/local/lib/python2.7/site-packages/cv2.so 移動到此文件夾中的任何一個。比如說,
su mv /usr/local/lib/python2.7/site-packages/cv2.so /usr/lib/python2.7/site-packages
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
OpenCV安裝完成。打開一個終端并嘗試 import cv 2 as cv。
要構建文檔,只需輸入以下命令:
make doxygen
然后打開 opencv/build/doc/doxygen/html/index.html 并在瀏覽器中將其添加為書簽。
在本教程中,我們將學習如何在Ubuntu系統中安裝OpenCV-Python。以下步驟針對Ubuntu 16.04和18.04(均為64位)進行了測試。
OpenCV-Python可以通過兩種方式安裝在Ubuntu中:
另一個重要的事情是需要額外的庫。OpenCV-Python只需要 Numpy (除了其他依賴項,我們將在后面看到)。但在本教程中,我們也使用 Matplotlib 來實現一些簡單而漂亮的繪圖目的(與OpenCV相比,我感覺好多了)。Matplotlib是可選的,但強烈推薦。同樣,我們還將看到 IPython ,一個交互式Python終端,這也是強烈推薦的。
這種方法在僅用于編程和開發(fā)OpenCV應用程序時效果最佳。
在終端中使用以下命令安裝python3-opencv軟件包(作為root用戶)。
$ sudo apt-get install python3-opencv
打開Python IDLE(或IPython),在Python終端中輸入以下代碼。
import cv2 as cv
print(cv.__version__)
如果結果打印出來沒有任何錯誤,恭喜!您已成功安裝OpenCV-Python。
這很容易。但這有一個問題。Apt存儲庫可能不總是包含最新版本的OpenCV。例如,在編寫本教程時,apt存儲庫包含2.4.8,而最新的OpenCV版本是3.x。
關于Python API,最新版本總是包含更好的支持和最新的錯誤修復。
因此,為了獲得最新的源代碼,首選的方法是下一個方法,即從源代碼編譯。此外,如果你想為OpenCV做貢獻,你也會需要這個。
從源代碼編譯可能看起來有點復雜,但一旦你成功了,就沒有什么復雜的了。
首先,我們將安裝一些依賴項。有些是強制的,有些是可選的?蛇x的依賴項,如果你不需要,可以不填。
我們需要 CMake 來配置安裝, GCC 用于編譯, Python-devel 和 Numpy 用于構建Python綁定等。
sudo apt-get install cmake
sudo apt-get install gcc g++
支持Python 2:
sudo apt-get install python-dev python-numpy
支持Python 3:
sudo apt-get install python3-dev python3-numpy
接下來,我們需要GTK支持GUI、camera(v4l)、media(ffmpeg,gstreamer)等。
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
支持GTK 2:
sudo apt-get install libgtk2.0-dev
支持GTK 3:
sudo apt-get install libgtk-3-dev
以上依賴項足以在您的fedora機器中安裝OpenCV。但根據您的需求,您可能需要一些額外的依賴項。下面給出了此類可選依賴項的列表。您可以選擇安裝或不安裝它,由你決定 ?
OpenCV附帶了支持PNG,JPEG,JPEG 2000,TIFF,WebP等圖像格式的文件,但它可能有點舊。如果你想獲得最新的庫,你可以安裝這些格式的開發(fā)文件。
yum install libpng-devel 安裝libpng-devel
yum install libjpeg-turbo-devel
yum install jasper-devel
yum install openexr-devel
yum install libtiff-devel
yum install libwebp-devel
注意:
如果您使用的是Ubuntu 16.04,您還可以安裝
libjasper-dev
以添加對JPEG 2000格式的系統級支持。
從OpenCV的GitHub Repository下載最新的源代碼。(如果你想為OpenCV做貢獻,請選擇此選項。為此,您需要先安裝 Git )。
$ sudo apt-get install git
$ git clone https://github.com/opencv/opencv.git
它將在當前目錄下創(chuàng)建一個文件夾“opencv”。克隆可能需要一些時間,具體取決于您的網絡連接。
現在打開一個終端窗口,導航到下載的“opencv”文件夾。創(chuàng)建一個新的“build”文件夾并導航到它。
$ mkdir build
$ cd build
現在我們已經有了所有需要的依賴項,讓我們安裝OpenCV。安裝必須使用CMake進行配置。它指定要安裝的模塊、安裝路徑、要使用的附加庫、是否要編譯文檔和示例等。
大多數工作都是通過配置良好的默認參數自動完成的。
以下命令通常用于配置OpenCV庫構建(從構建文件夾執(zhí)行):
$ cmake ../
OpenCV默認假定“Release”構建類型,安裝路徑為“/usr/local”。有關CMake選項的更多信息,請參閱 OpenCV C++編譯指南 。
您應該在CMake輸出中看到這些行(它們意味著正確找到了Python):
-- Python 2:
-- Interpreter: /usr/bin/python2.7 (ver 2.7.6)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.6)
-- numpy: /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.8.2)
-- packages path: lib/python2.7/dist-packages
--
-- Python 3:
-- Interpreter: /usr/bin/python3.4 (ver 3.4.3)
-- Libraries: /usr/lib/x86_64-linux-gnu/libpython3.4m.so (ver 3.4.3)
-- numpy: /usr/lib/python3/dist-packages/numpy/core/include (ver 1.8.2)
-- packages path: lib/python3.4/dist-packages
現在使用“make”命令構建文件并使用“make install”命令安裝它。
$ make
# sudo make install
安裝結束了。所有文件都安裝在“/usr/local/”文件夾中。打開一個終端并嘗試 import cv2。
import cv2 as cv
print(cv.__version__)