摘要:
由于最近AR(增強現實(shí))這個(gè)概念非?;鸨?,各種基于A(yíng)R的應用及游戲逐漸面向大眾,而在A(yíng)R中最重要的兩個(gè)技術(shù)就是跟蹤識別和增強渲染,其中跟蹤識別是通過(guò)OpenCV這個(gè)開(kāi)源的計算機視覺(jué)庫來(lái)實(shí)現的,所以我就想著(zhù)研究一下這個(gè)庫,這里是個(gè)人的學(xué)習筆記,不是什么權威的教程,如果你們有錯誤也麻煩幫我指出哈。
=============================================分割線(xiàn)==================================================
前言:
什么是OpenCV?可能還有人不清楚吧,簡(jiǎn)單地說(shuō),OpenCV——Open Source Computer Vision Library,即開(kāi)源計算機視覺(jué)庫,它是基于C語(yǔ)言和部分C++語(yǔ)言來(lái)開(kāi)發(fā),可用于計算機視覺(jué)、圖像處理以及模式識別和跟蹤。
一、準備工作:
1.下載OpenCV安裝包:
到OpenCV的官網(wǎng)(http://opencv.org/)下載最新版本的OpenCV安裝包,由于OpenCV針對不同平臺都有安裝程序,所以我們只需要根據當前開(kāi)發(fā)環(huán)境選擇合適的平臺版本即可,這里我們是在win7 64bit操作系統下進(jìn)行開(kāi)發(fā),所以應該下載OpenCV for Windows:
我們選擇了當前的最新版本3.1,下載完畢后,我們得到其安裝文件:opencv-3.1.0.exe
2.安裝Visual Studio 2015
二、安裝配置:
1.安裝:
雙擊打開(kāi)下載好的opencv-3.1.0.exe文件,進(jìn)行安裝(其實(shí)是解壓),選擇安裝目錄:
安裝完畢之后,在其安裝目錄下可以看到兩個(gè)文件夾:build和sources,其中build是OpenCV使用時(shí)要用到的一些庫文件,而sources中則是OpenCV為我們提供的一些demo示范源碼:
2.環(huán)境變量配置:
上面步驟只是完成了安裝,但是要能夠正常使用OpenCV來(lái)進(jìn)行開(kāi)發(fā),我們還需要進(jìn)行環(huán)境變量的配置,我的電腦—>屬性—>高級系統設置—>環(huán)境變量,找到Path變量,選中并點(diǎn)擊編輯:
64位系統的需要在path添加“;opencv安裝路徑\build\x64\vc14\bin”(注:英文輸入法中的“;”是分割符,用于與前面其他軟件的配置參數分開(kāi)),例如我的配置參數應該為:;E:\OpenCV\opencv\build\x64\vc14\bin。在之前的opencv版本中的配置時(shí),32位系統應配置路徑“;opencv安裝路徑\build\x86\vc14\bin”,但是3.1.0版本的OpenCV已經(jīng)將x86這個(gè)目錄刪除了,也就是說(shuō)在VS 2015環(huán)境下不能進(jìn)行32位的OpenCV編譯。
還有一個(gè)要注意的就是x64文件夾下分為vc12和vc14兩個(gè)文件夾,他們對應于VS的版本,例如VS2013應使用vc2012,而這里我們使用的是VS 2015,所以應該使用vc14文件目錄:

補充:vc8 = Visual Studio 2005,vc9 = Visual Studio 2008,vc10 = Visual Studio 2010,vc11 = Visual Studio 2012,vc12 = Visual Studio 2013,vc14 = Visual Studio 2015
注意:環(huán)境變量配置完畢之后,需要重啟電腦才能生效!
3.VS 2015配置:
我們知道要在VS中使用外部的類(lèi)庫的話(huà),需要進(jìn)行引入的一下配置,這個(gè)配置就包括:外部庫目錄指定和外部包含文件指定。
打開(kāi)VS 2015,新建一個(gè)空白的win32的控制臺工程:

選擇語(yǔ)言為C++,Win32類(lèi)型中的控制臺工程,并設置工程名稱(chēng):

指定建立的工程為空白工程:

建立完工程之后,我們選中解決方案欄中的Resource Files目錄(即源碼目錄),然后新建一個(gè)C++源碼文件:

設置源碼的文件名,例如:Main,然后創(chuàng )建此源碼文件到工程中:

在VS中有個(gè)叫做“屬性管理器”的工具,用于進(jìn)行VS整體參數的配置,配置一次之后,以后所有新建項目都能應用改配置,不用再一一進(jìn)行配置操作,使用起來(lái)也非常方便。點(diǎn)擊工具欄中的:View—>Other Windows—>Property Manger打開(kāi)屬性管理器:

在新出現的屬性管理器欄中,展開(kāi)目錄,選中Debug|Win64中的Microsoft.Cpp.x64.user,并右鍵點(diǎn)擊屬性(Properties)進(jìn)入屬性界面:

1)配置包含目錄:
在通用屬性(Common Properties)—>VC ++目錄—>包含目錄,然后點(diǎn)擊右側三角標志選中Edit進(jìn)入編輯:

向其中添加下面三個(gè)路徑:
E:\OpenCV\opencv\build\include
E:\OpenCV\opencv\build\include\opencv
E:\OpenCV\opencv\build\include\opencv2

2)配置庫文件目錄:
完成上面的包含目錄配置之后,我們還需要進(jìn)行庫文件的配置:回到屬性界面,選擇包含目錄下面的Library Directories(庫文件目錄):

向庫文件目錄下添加OpenCV的庫文件目錄:E:\OpenCV\opencv\build\x64\vc14\lib,這個(gè)目錄根據每個(gè)人自己在第一步安裝OpenCV中選擇的目錄進(jìn)行選定:

3)配置動(dòng)態(tài)鏈接庫:
我們可以查看步驟2)中添加的庫文件目錄下面.lib文件列表,發(fā)現在3.1.0版本的OpenCV中,僅剩下兩個(gè)庫文件,分別是:opencv_world310.lib和opencv_world310d.lib,這里兩個(gè)庫文件的區別就是:opencv_world310.lib是Release模式版本,而opencv_world310d.lib是Debug模式版本:

跟上述兩個(gè)步驟相似,在屬性界面中打開(kāi)Linker(鏈接庫)—>Input(輸入)—>Additional Dependencies(添加依賴(lài)):

將我們剛剛在OpenCV庫文件目錄下看到的兩個(gè)庫文件其中一個(gè)添加到這里(根據模式需求Release模式或Debug模式):

其實(shí),對已經(jīng)發(fā)行和未來(lái)即將發(fā)布的新版OpenCV,只需看opencv\build\x86\vc10\lib下的庫是哪幾個(gè),添加成依賴(lài)項就可以了。
三、實(shí)踐:
在完成了上述所有配置工作之后,我們需要進(jìn)行一次實(shí)測,用于驗證以上配置是否成功。這里我們的測試demo功能很簡(jiǎn)單,就是在一個(gè)窗口中顯示我們指定的一張圖片。在之前的Main.cpp文件中添加以下代碼:
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main(){ // 讀入一張圖片(游戲原畫(huà)) Mat img = imread("pic.jpg"); // 創(chuàng )建一個(gè)名為 "游戲原畫(huà)"窗口 namedWindow("游戲原畫(huà)"); // 在窗口中顯示游戲原畫(huà) imshow("游戲原畫(huà)", img); // 等待6000 ms后窗口自動(dòng)關(guān)閉 waitKey(6000); }
將圖片pic.jpg復制到工程目錄下面,與源碼位于同一目錄:

運行工程,假如一切都正常的話(huà),會(huì )出現如下結果:

四、可能出現的問(wèn)題:
1.運行程序時(shí),發(fā)現編譯不通過(guò),報一下錯誤:

這個(gè)錯誤出現的原因是:我們之前說(shuō)過(guò)在VS 2015中不能進(jìn)行32位的OpenCV的編譯,而且我們整個(gè)配置過(guò)程都是針對于64位系統而進(jìn)行的,那么我們要如何才能讓VS 2015運行64的調試模式呢,其實(shí)很簡(jiǎn)單,在工具欄中切換一下就好:

2.無(wú)法加載圖片,提示指針越位:

出現這個(gè)問(wèn)題一般可能有兩個(gè)原因:
一是圖片后綴名不對或者是目錄存放位置不正確;
二是屬性配置中的動(dòng)態(tài)庫配置中,帶d和不帶d的兩個(gè)庫文件配置情況與當前調試模式不對應,可以在解決方案中直接選中當前工程,右鍵進(jìn)入屬性面板,然后修改其Linker中的Additional Dependencies:


