安裝visual studio 2012,並配置opencv
在同學的幫助下,終於成功配置了vs+opencv,將詳細過程記錄在此,方便以後查閱
參考1
本文目錄
安裝vs2012
1.下載vs2012安裝包並雙擊進行安裝
下載vs2012安裝包,官方下載地址
雙擊安裝檔案,設定安裝路徑
2.選擇需要的功能,下面選擇了所有的功能,也可以只選擇部分功能,如果只需要用到C++,只安裝用於C++的微軟基礎類
就可以了
3.安裝進行中
4.終於安裝完成
5.點選啟動
提示輸入產品祕鑰
YKCW6-BPFPF-BT8C9-7DCTH-QXGWC
啟用成功
6.出現其它配置頁面
這裡選擇C++為預設開發環境
7.啟動
8.注意,本人在安裝完vs2012後,出現了相容性問題,如下圖所示
發現網路有文章說,這是因為本機同時安裝了vs2010和vs2012導致的,需要安裝一個更新包,按照其給出的連結,下載了該更新包,並安裝:
問題解決。
安裝opencv
1.下載opencv原始碼
- 點選Download,在彈出的新頁面中選擇需要下載的opencv版本,這裡選擇2.4.9
- 開始下載
- 大概349MB
2.解壓原始碼
- 解壓路徑任意
- 解壓後的原始碼
3.為opencv配置環境變數
(1)計算機右鍵“屬性”
(2)高階系統設定
(3)點選環境變數
(4)在名稱為PATH的環境變數中新增opencv的bin資料夾路徑,具體地:
①32位系統,新增:D:\File Program\opencv\build\x86\vc11\bin
②64位系統,新增:
opencv_root\build\x86\vc11\bin
(D:\File Program\opencv\build\x86\vc11\bin) (對應於32位系統)
opencv_root\build\x64\vc11\bin
(D:\File Program\opencv\build\x64\vc11\bin) (對應於64位系統)
目的是為了可以在編譯器Win32和X64中來回切換,其實就是為了使編譯可以找到32位的dll,也可以找到64位的dll
- 注1:D:\File Program\opencv為opencv的解壓路徑
- 注2:vc11表示編譯環境為Microsoft Visual Studio 2012;
- 注3:
vc10 = Visual Studio 2010
vc11 = Visual Studio 2012
vc12 = Visual Studio 2013
(5)關於opencv的解壓檔案
opencv安裝後(其實就是解壓縮),得到一個名稱為
opencv
的資料夾,該資料夾下有兩個子檔案件:
source:opencv的原始碼(opencv是開源的),下面的build資料夾下的各種庫就是在這些原始碼的基礎上利用cMake得到的
- 該資料夾下有一個modules的資料夾,存放的是各個領域的原始碼
build:存放的opencv預編譯好的各種庫,對於使用opencv的使用者來說,只使用該資料夾就夠了,不需要自己利用opencv的原始碼重新編譯得到這些庫
- opencv提供兩種庫:DLL(動態連結庫)和lib庫(靜態連結庫)
- DLL:假設某個程式呼叫了DLL,那麼生成該程式時,被呼叫的DLL並不會被整合到生成的.exe檔案,只有後續在執行.exe檔案時,.exe檔案才會呼叫這些DLL,也就是說,生成的.exe檔案需要執行在具有這些DLL檔案的機器上,它的好處就是可以使.exe檔案比較小
- lib:在對程式進行生成時,lib庫會被build-in到.exe檔案中,這樣就會使得生成的.exe檔案比較大,但.exe檔案在執行時,就不需要再外調其他庫了,同時,使用者也無法對.exe進行任何更改
- 在使用opencv時,DLL和lib兩種庫都是被提供的,程式設計者可以自己選擇使用哪種庫
- opencv提供兩種庫:DLL(動態連結庫)和lib庫(靜態連結庫)
在vs2012中配置opencv
在利用vs2012生成呼叫了opencv的程式時,必須要做的是兩件事:
- 告訴compiler,opencv的庫到底長什麼樣子,也就是,配置include路徑
- 告訴linker去哪裡找到opencv的庫(lib或者是dll)
下面是詳細的設定方法:
1.開啟vs2012
2.新建win32控制檯應用程式
3.在解決方案資源管理器處:原始檔->新增->新建項
4.在屬性管理器處進行配置
(在屬性管理器中進行一次配置,就相當於進行了通用的配置過程,以後新建的工程就不用再額外的進行重新配置了)
(1)檢視->屬性管理器
(2)彈出了屬性管理器
(3)配置Debug Win32
注:這裡討論的是Debug,Release的配置完全類似
- 在Debug | Win32處的Microsoft.Cpp.Win32.user右鍵“屬性”
彈出Microsoft.Cpp.Win32.user屬性頁
(4)開始配置Microsoft.Cpp.Win32.user屬性頁
① 新增包含目錄,從而,C++程式可以include opencv
(設定VC++目錄):- 在彈出的屬性頁中,找到”VC++目錄“,在對應的右側包含目錄中,輸入opencv的build->include目錄
- 可以看到,opencv->build->include目錄下有兩個資料夾,應該將該大目錄和兩個資料夾目錄都加入到include目錄下
即將如下三個目錄都新增到包含目錄中
opencv_root\build\include
(D:\File Program\opencv\build\include)opencv_root\build\include\opencv
(D:\File Program\opencv\build\include\opencv)opencv_root\build\include\opencv2
(D:\File Program\opencv\build\include\opencv2
關於“Visual Studio 2010專案屬性頁中“VC++ 目錄” ,利用VC+++目錄,可以指定如下的目錄:
- 可執行目錄:搜尋可執行檔案的目錄。對應於 PATH 環境變數。
- 包含目錄:搜尋在原始碼中引用的包含檔案的目錄。對應於 INCLUDE 環境變數。
- 引用目錄:搜尋通過 #using 指令在原始碼中引用的程式集和模組(元資料)檔案的目錄。對應於 LIBPATH 環境變數
- 庫目錄:搜尋庫(包括執行時庫)的目錄。對應於 LIB 環境變數。
- 源目錄:搜尋用於 IntelliSense 的原始檔的目錄。
- 排除目錄:檢查生成依賴項時,不會搜尋目錄。
- 在彈出的屬性頁中,找到”VC++目錄“,在對應的右側包含目錄中,輸入opencv的build->include目錄
②新增庫目錄(即靜態連結庫的位置)(設定VC++目錄)
- 仍舊在剛剛的VC++目錄右側,在庫目錄中新增opencv->build->x86->vc11->lib路徑
即:D:\File Program\opencv\build\x86\vc11\lib
- 注意:這裡都是用x64還是x86取決與編譯器(而不是作業系統!)
- 如下圖所示,編譯器為Win32,那麼,就應該選擇x86目錄下的庫
③新增連結庫(即動態連結庫的名稱)(設定聯結器)
在“Microsoft.Cpp.Win32.user屬性頁”的連結器->輸入的右側找到附加依賴項
新增如下dll名稱(2.4.9版本-Debug對應的opencv中的動態連結庫)(這裡只需要指出dll的名稱,而不需要指出路徑,這是因為存放這些dll檔案的路徑已經在安裝完opencv後,手動新增到了環境變數PATH中了)
opencv_ml249d.lib
opencv_calib3d249d.lib
opencv_contrib249d.lib
opencv_core249d.lib
opencv_features2d249d.lib
opencv_flann249d.lib
opencv_gpu249d.lib
opencv_highgui249d.lib
opencv_imgproc249d.lib
opencv_legacy249d.lib
opencv_objdetect249d.lib
opencv_ts249d.lib
opencv_video249d.lib
opencv_nonfree249d.lib
opencv_ocl249d.lib
opencv_photo249d.lib
opencv_stitching249d.lib
opencv_superres249d.lib
opencv_videostab249d.lib注:如果配置的是Release | Win32,那麼,需要新增的是如下19個不帶d的release版
opencv_objdetect249.lib
opencv_ts249.lib
opencv_video249.lib
opencv_nonfree249.lib
opencv_ocl249.lib
opencv_photo249.lib
opencv_stitching249.lib
opencv_superres249.lib
opencv_videostab249.lib
opencv_calib3d249.lib
opencv_contrib249.lib
opencv_core249.lib
opencv_features2d249.lib
opencv_flann249.lib
opencv_gpu249.lib
opencv_highgui249.lib
opencv_imgproc249.lib
opencv_legacy249.lib
opencv_ml249.lib另外,對於opencv2.4.8
Debug版
opencv_ml248d.lib
opencv_calib3d248d.lib
opencv_contrib248d.lib
opencv_core248d.lib
opencv_features2d248d.lib
opencv_flann248d.lib
opencv_gpu248d.lib
opencv_highgui248d.lib
opencv_imgproc248d.lib
opencv_legacy248d.lib
opencv_objdetect248d.lib
opencv_ts248d.lib
opencv_video248d.lib
opencv_nonfree248d.lib
opencv_ocl248d.lib
opencv_photo248d.lib
opencv_stitching248d.lib
opencv_superres248d.lib
opencv_videostab248d.libopencv2.4.8-Release版
opencv_objdetect248.lib
opencv_ts248.lib
opencv_video248.lib
opencv_nonfree248.lib
opencv_ocl248.lib
opencv_photo248.lib
opencv_stitching248.lib
opencv_superres248.lib
opencv_videostab248.lib
opencv_calib3d248.lib
opencv_contrib248.lib
opencv_core248.lib
opencv_features2d248.lib
opencv_flann248.lib
opencv_gpu248.lib
opencv_highgui248.lib
opencv_imgproc248.lib
opencv_legacy248.lib
opencv_ml248.lib
測試opencv是否配置成功
新建空白win32控制檯應用程式
在專案中新增一個cpp,在cpp中輸入如下程式碼
注:一定要保證專案路徑下由pic影象!
或者是直接給出影象的絕對路徑(這樣可以避免路徑錯誤)
#include<iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
// 讀入一張圖片(遊戲原畫)
Mat img=imread("pic.jpg");
// 建立一個名為 "遊戲原畫"視窗
cvNamedWindow("遊戲原畫");
// 在視窗中顯示遊戲原畫
imshow("遊戲原畫",img);
// 等待6000 ms後窗口自動關閉
waitKey(6000);
}
(1)編譯
成功,沒有編譯錯誤
(2)執行程式,成功顯示影象
注1:如果路徑下沒有要操作的影象,會出現如下錯誤
注2:如果出現“無法啟動應用程式,計算機丟失…….dll檔案”的錯誤,應該就是opencv-dll路徑的問題,因為應用程式無法找到它所需要的dll檔案,這個時候需要檢查一下dll的路徑,或者檢查設定的dll路徑下是否有該dll檔案的存在,如果dll路徑是在vs開啟後修改的,那麼,現就該完dll路徑後,記得重啟一下vs
關於visual studio的解決方案
- 在visual studio中新建立一個專案project1,該專案屬於了一個解決方案,例如,該解決方案的名稱為test
- 在解決方案的路徑下(該解決方案的路徑名稱為test)會有一個
test.sln
檔案、一個SQL檔案和一個project1資料夾
- 想要開啟test解決方案時,直接雙加
test.sln
檔案或者通過visual studio開啟test.sln
檔案即可 實際上,test.sln是一個解決方案檔案,它可以用文字編輯器開啟,它包含了與該解決方案相關的一系列內容,例如
- Microsoft Visual Studio Solution File:用來說明解決方案檔案的版本號,12.00 說明是 VS2013 的解決方案檔案。
- VisualStudioVersion:開啟這個解決方案檔案需要的 Visual Studio 版本號
- MinimumVisualStudioVersion:能夠開啟這個解決方案的最低 Visual Studio 版本號
- Project:解決方案中包含若干個專案,每個專案有一個 Project 的說明,格式為
Project(專案在解決方案中的編號)=顯示名稱, 實際路徑, 專案唯一標識 ) EndProject
- 專案唯一標識來自專案檔案,在 專案名稱.csproj 檔案中可以找到如下說明
- 專案唯一標識來自專案檔案,在 專案名稱.csproj 檔案中可以找到如下說明
- Global:……