本節書摘來自華章計算機《opencv圖像處理》一書中的第1章,第1.4節,作者:[西]葛羅瑞亞·布埃諾·加西亞(gloria bueno garcía)著,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視
本書中,我們假定c++是圖像處理應用程式設計的主要語言,盡管實際上也提供了其他程式設計語言的接口和封裝器(例如,python、java、matlab/octave等)。
本節說明如何用opencv的c++ api(一種易用的跨平台架構)開發應用。
1.4.1 庫的一般使用方法
為了用c++開發一個opencv應用,需要在代碼中:
包含opencv的頭檔案定義
連結opencv庫(二進制檔案),以擷取最終的可執行檔案
opencv頭檔案位于opencv_buildinstallincludeopencv2目錄中,此處對于每個子產品都有一個檔案(*.hpp)。用#include指令包含頭檔案,如下所示:

用這個指令,可以包含使用者程式所需的每個頭檔案。另一方面,如果包含opencv.hpp頭檔案,那麼所有的頭檔案都将被自動包含,如下所示:
記住,本地安裝的所有子產品都在opencv_buildinstallincludeopencv2opencv_modules.hpp頭檔案中定義,并在opencv的建構過程中自動生成。
<code>#include</code>指令的使用并非總能保證對頭檔案的正确包含,因為告訴編譯器在哪裡能找到包含檔案是有必要的。這一點可以通過傳遞具有檔案位置的一個特殊參數來實作(例如,對于gnu編譯器為i< location>)。
連結過程需要提供(動态或靜态)連結庫,在這裡可以找到所需的opencv功能。這個過程通常用連結器的兩種類型參數完成:庫的位置(例如,gnu編譯器的-l< location>)和庫的名字(例如,-l< module_name>)。
1.4.2 開發新項目的工具
開發我們自己的opencv c++應用的主要先決條件是:
opencv頭檔案和庫二進制檔案:當然,我們需要編譯opencv,并且對這樣一個編譯,輔助庫是先決條件。該代碼包應該使用與生成使用者應用程式相同的編譯器來編譯。
一個c++編譯器:一些關聯工具用作代碼編輯器、調試器、項目管理器、建構過程管理器(build process manager)(例如,cmake)、修訂控制系統(revision control system)(例如,git、mercurial、svn等)、類檢測器(class inspector)等是友善的。通常,這些工具在一個內建開發環境(integrated development environment,ide)中一起進行配置。
任何其他輔助庫:有時編寫最終應用程式所需的任何其他輔助庫,例如繪圖、統計等,可能是需要的。
對于編寫opencv c++應用,最流行的可用編譯工具包是:
microsoft visual c(msvc):隻在windows上支援,與ide visual studio內建得很好,當然也可以與其他跨平台的ide內建,例如,qt生成器或eclipse。與目前最新的opencv釋出相容的msvc版本是vc 10、vc 11和vc 12(visual studio 2010、2012和2013)。
gnu compiler collection gnu gcc:這是由gnu項目開發的一個跨平台的編譯器系統。對于windows來說,該工具包就是衆所周知的mingw(最小的gnu gcc)。與目前opencv釋出相容的版本是gnu gcc 4.8。該工具包可以和若幹ide一起使用,例如,qt生成器、code::blocks、eclipse等。
對于本書提供的示例,我們為windows+qt 5.2.1庫和qt生成器ide(3.0.1)使用mingw 4.8編譯工具包。編譯opencv需要跨平台qt庫所提供的新ui功能。
qt生成器是一個針對c++的跨平台ide,它內建了我們編寫應用時所需的工具。在windows中,可以使用mingw或msvc。圖1-3展示了對于一個opencv c++項目具有不同的面闆和視圖的qt生成器的主視窗:
1.4.3 使用qt生成器建立opencv c++程式
接下來,我們說明如何用qt生成器的ide建立代碼項目。特别地,我們将這個描述應用到一個opencv示例上。
使用qt生成器,可以為任意opencv應用程式建立項目。要做到這一點,需要導航到file | new file or file | project,然後導航到non-qt project | plain c++ project。之後,必須選擇一個項目名字和将要存儲的位置。再下一步,為該項目(在該示例中,桌上型電腦為qt 5.2.1 mingw 32位)選擇一個工具包(即編譯器),并為生成的二進制檔案定位。通常,使用兩種可能的方法建構配置(配置檔案):debug和release。這些配置檔案設定合适的标志(f?lag)來建構和運作二進制檔案。
使用qt生成器建立一個項目時,生成兩個特殊檔案(具有.pro和.pro.user擴充名)來配置建構和運作過程。該建構過程是通過項目建立期間所選擇的工具包确定的。對于qt 5.2.1 mingw 32位包,這個過程則依賴于qmake和mingw32-make工具。使用*.pro檔案作為輸入,qmake會為驅動每個配置檔案(即,release和debug)的建構過程,産生該生成檔案。在qt生成器ide中使用qmake工具替代cmake,可簡化軟體項目的建構過程。隻需幾行資訊,即可自動産生生成檔案。
以下代碼行表示一個*.pro檔案的示例(例如,showimage.pro):
上面的檔案說明qmake所需的選項,以便為項目建構二進制代碼産生合适的生成檔案。以一個标簽開始的每一行,指定一個選項(target、config、sources、includepath和libs),後跟一個标志來添加(+=)或删除(-=)該選項的值。在這個示例項目中,使用非qt控制台應用。可執行檔案是showimage.exe(target)和源檔案showimage.cpp(sources)。因為這個項目是一個基于opencv的應用,是以後兩個标簽指定頭檔案的位置(includepath)以及由這個特定項目(core、imgcodecs、highgui和imgproc)所使用的opencv庫(libs)。注意,行尾的反斜線表示續行。