OpenCv是C++圖像處理的重要工具,這個人臉性別識別的項目就是借助OpenCv進行開發的。雖然網上已經有了很多關於OpenCv的配置教程,但出於教程完整性考慮,這裡還是用專門的一篇博客來介紹OpenCv的具體配置方法,同時也介紹一下OpenCv中的一個強有力的圖像處理插件——ImageWatch。
由於這個程序是一年前寫的,當時的OpenCv的最新版本為2.4.9(現在已經更新到了3.0),並且2.4.9版本和3.0版本在配置方法上稍有不同,這裡我仍以2.4.9版本為例來介紹配置方法,有關3.0的新特性以及配置方法大家可以參考網絡資源。
一、OpenCv的下載安裝
首先,給出OpenCv的官方下載地址:OpenCv下載。
下載完成後,得到一個大約300M左右的exe文件:
雙擊進行開始安裝,輸入安裝位置,單擊Extract按鈕:
安裝過程實質上就是一個解壓縮的過程:
安裝完成後存在兩個目錄:build和source。Build目錄下主要存放了相關的庫文件,也就是OpenCv的主體部分。Source目錄下主要存放了一些幫助文檔和官方提供的資源(例如已經訓練好的分類器等):
二、配置路徑
下載安裝完成之後, 啟動VS2012,任意打開一個項目。我們這裡新建一個空的Win32控制台應用程序。在其中調用OpenCv:
這裡用紅色下劃線標記了#include語句,說明當前尚未進行OpenCv配置。OK,接下來開始配置。
1、配置VS路徑
單擊“項目—>屬性”,打開屬性對話框:
在“配置屬性—>VC++目錄”節點下,單擊“包含目錄”右側的下來按鈕:
選擇OpenCv目錄下的include文件夾路徑:
同理,在“庫目錄”中添加lib文件夾路徑:
這裡有兩點需要說明:
(1)X64。在build文件夾下有兩個文件X86和X64,X86是針對32位windows系統的,X64是針對64位系統的。由於我的電腦是64位win7,所以理所當然選擇了X64,不過需要說明的一點是64位系統下同樣可以使用X86下的文件,只要將調試器設置為win32即可。
(2)VC11。在X86和X64文件夾下分別都有三個文件夾:V10、V11、V12。其中V10適用於VS2010,V11使用於VS2012,V12適用於VS2013(當時還未發布VS20150),我們這裡選擇VS11文件夾。
接下來在“配置屬性—>鏈接器—>輸入”節點下,在“附加依賴項”窗口中輸入以下OpenCv庫文件名稱:
opencv_calib3d249d.lib
opencv_core249d.lib
opencv_features2d249d.lib
opencv_flann249d.lib
opencv_gpu249d.lib
opencv_highgui249d.lib
opencv_imgproc249d.lib
opencv_legacy249d.lib
opencv_ml249d.lib
opencv_objdetect249d.lib
opencv_ts249d.lib
opencv_video249d.lib
opencv_contrib249d.lib
opencv_nonfree249d.lib
單擊應用,關閉設置窗口。
2、配置環境變量
Windows系統的環境變量幾乎是所有編程軟件必須折騰的地方,因為編譯器在啟動時都會通過環境變量來自動讀取搜索路徑。
至於如何打開環境變量窗口這裡就不再贅述,這裡需要將OpenCv的bin(可執行文件)目錄的路徑“”添加到環境變量中:
配置完成後,重啟VS,再次輸入include命令,發現在VS給出的提示列表中出現了“OpenCv2”這一項,初步認定配置完成:
接下來我們編寫一個小程序來測試OpenCv:讀取F盤根目錄下的一張彩色圖片,灰度化,然後顯示,代碼如圖:
按下F7進行編譯,程序報錯,類型為“error LNK2019: 無法解析的外部符號……”。這是因為程序默認使用了32位的Debug調試器,而我們配置的是64位的opencv,因此需要使用64位的Debug調試器。單擊工具欄“win32”對應的下拉菜單,選擇配置管理器:
在彈出的窗口中單擊“Win32”下拉按鈕,選擇“新建”:
新建平台選擇X64:
單擊確定,關閉設置對話框,此時我們已經創建了一個64位的Debug調試器,接下來在調試器欄選擇這個64位調試器即可:
再次按下F7,編譯成功。F5,調試成功。Ctrl+F5,程序順利運行,顯示圖片。
三、ImageWatch插件
接下來介紹OpenCv的一個強力的VS輔助插件:ImageWatch。
1、外觀
首先強調一點,ImageWatch必須在調試過程中才能起作用,要想使用ImageWatch相應的就要給程序設置一些斷點來使程序暫停。首先,給出ImageWatch的外觀:
可以看出,ImageWatch能夠實時的顯示出當前程序中的圖片(確切的說是Mat矩陣)信息,包括尺寸、像素、外觀等等,著無疑給程序的調試帶來了相當的大的便利。接下來我們詳細介紹一下這個插件的功能。
2、ImageWatch插件安裝
首先,給出一篇我之前寫的關於ImageWatch插件教程:ImageWatch教程。
ImageWatch官方幫助文檔:幫助文檔。
ImageWatch下載地址:下載地址。
下載完成後,雙擊安裝即可。安裝過程中會自動識別當前已安裝的編譯器,選擇VS2012即可。
安裝完成後,需要手動啟用這個插件。打開VS,單擊“視圖—>其他窗口—>ImageWatch”:
此時再次設置斷點,F5調試,ImageWatch正常工作。接下來我們介紹它的幾個常用功能。
3、常用功能
(1)圖片查看
能夠實時顯示當前圖片的狀態,縮略圖等,這點不必多說:
(2)查看像素信息
將鼠標放在右側預覽窗口,上方標題欄會實時顯示當前鼠標指針所在像素的位置坐標以及像素值、縮放比例(從左往右依次是坐標值和像素值、縮放比例):
在預覽窗口中按下“Ctrl+鼠標滾輪”,會對圖片進行放大和縮小,直至放大到可以看清像素值(彩色圖像由三個值,RGB):
4、保存圖片
ImageWatch可以方便的將當前的圖片保存下來,只需在對應圖標上單擊右鍵,在快捷菜單中選擇“Dump to File”即可:
ImageWatch還有更多功能,例如圖像的關聯顯示等等,詳細功能請大家參加之前提供的博客以及官方幫助文檔,這裡就不再贅述。
四、總結
這是本套教程准備部分的最後一篇文檔,在接下裡的博客中我們將開始編寫代碼。這裡說幾個需要注意的事項:
(1)OpenCv還是建議大家用新版。OpenCv的發展經歷了1.x、2.x,到如今的3.0版。1.x版本的OpenCv只提供了C語言的接口,其中的所有的API函數都以“cv”開頭,只有結構體,沒有類結構,用Iplimage指針類型表示圖像等等。不等不說,OpenCv的發展趨於完善,2.4系列版本是公認的成熟版本。不過前兩天我在浏覽OpenCv官網的時候發現在3.0版本中出現了很多比較新的算法,例如DeepLearning,因此建議搞圖像處理算法的同行們還是去嘗試使用一下3.0版本吧。
(2)寫教程要多用圖。這段話可能說得讓大家有些莫名其妙,但我覺得有必要拿出來說一說。以前我寫教程時大多長話連篇、恨不得連代碼都想用語言敘述出來,後來我在翻譯《最全Pycharm教程》的過程中,深深體會到了圖文並茂的重要性,也深深的體會到了歪果仁在編程、敘事方面的嚴謹。所以我也吸取了經驗,用圖說話,於是你就看到了這篇不到2500字,但有著23張圖的文章,以後的文章也是這樣,不知道大家能否適應哈。