1. 程式人生 > >安裝visual studio 2012,並配置opencv

安裝visual studio 2012,並配置opencv

在同學的幫助下,終於成功配置了vs+opencv,將詳細過程記錄在此,方便以後查閱
參考1

本文目錄

安裝vs2012

1.下載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兩種庫都是被提供的,程式設計者可以自己選擇使用哪種庫

在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++目錄)

  • 仍舊在剛剛的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.lib

  • opencv2.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 檔案中可以找到如下說明
        這裡寫圖片描述
    • Global:……

    這裡寫圖片描述