跳到主要內容

Opencv : 安裝

Vusial Stdio 2010VC2010)下安裝OpenCV2.1

轉自:http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=10070&p=39565&hilit=visual+2010#p37694

本文主要來自heyoup 的「面對面教你如何在VS2010下配置OPENCV2.1」,只是稍作編輯,參考其他地方的資料改正些許重要錯誤和缺漏。

環境:windows 7+visual studio 2010+opencv 2.1,成功!xp更應該能成功。耐心點,按下面的一步一步來,應該是沒什麼問題的,祝您好運啦!

1
、下載文件
OpenCV2.1
官方地址:http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/OpenCV-2.1.0-win.zip/download
推薦本論壇地址:http://www.opencv.org.cn/download/OpenCV-2.1.0-win32-vs2008.exe
CMAKE 2.8.1
http://www.cmake.org/files/v2.8/cmake-2.8.1-win32-86.exe
INTELTBB3.0
http://www.threadingbuildingblocks.org/uploads/77/151/3.0/tbb30_20100406oss_win.zip

2
、首先安裝CMAKE2.8.1,然後將 OpenCV2.1安裝到你將要放置OPENCV的地方,接著,解壓INTEL TBB 3.0,比如將OPENCVTBB都放在D:\Program Files裡面。並在OpenCV文件夾下創建子目錄D:\Program Files\OpenCV2.1\vs2010,用於存放編譯結果。

檢查D:\Program Files\OpenCV2.1\binD:\Intel TBB 3.0\bin\ia32\vc10是否已經被加入到環境變量(我的電腦-屬性-環境變量)PATH,如果沒有,請加入。加入後需要註銷當前Windows用戶(或重啟)後重新登陸才生效。(可以在任務管理器裡重啟explorer.exe)

打開CMAKE 2.8.1,在Where is the source code後面填寫(或者選擇)OPENCV 2.1的安裝目錄,如D:\Program Files\OpenCV2.1,在Where to build the binaries裡填寫剛創建的子目錄D:\Program Files\OpenCV2.1\vs2010。接著點擊Configure按鈕,在出現的對話框中選擇Visual Studio 10,下面的選項選擇Use default native compilers,點擊Finish繼續。

過一會兒之後會出現一個配置窗口(此處注意在CMAKE配置的時候是不能夠打開VS2010的),然後勾選 BUILD_SHARED_LIBSBUILD_TESTSOPENCV_BUILD_3DPARTY_LIBS,以及下面的 WITH_JASPERWITH_JPEGWITH_PNGWITH_TBB(一般這個沒默認選上),WITH_TIFF選項

勾好後再次點擊Configure,之後再配置窗口最上面會出現TBB_INCLUDE_DIR-NOTFOUND字樣的紅色選項,此處為CMAKE找不 到INTEL TBB的包含文件為之所致,將INTEL TBB 3.0里面的INCLUDE文件夾路徑(注意是INCLUDE,不是INCLUDE裡面的子文件夾)定位到該配置屬性的路徑裡,再次點擊 Configure,在TBB_LIB_DIR處又會出現紅色一行,此處為INTEL TBB的庫文件位置,此處必須將路徑定位到含有LIB文件的位置,比如我的安裝位置是D:/Program Files/Intel TBB 3.0/lib/ia32/vc10,也就是說,在lib文件夾下會有子文件夾,必須定位到子文件夾對應的VC版本文件夾裡去,這裡由於是配置 VS2010,所以我們選擇VC10文件夾,ia32子文件夾是32位系統,此處應根據對應操作系統選擇。

然後,我們再次點擊Configure,此時所有紅色行已經變為白色,同時在下方的信息裡面會有一條為Use TBB:YES的字樣,證明我們已經將INTEL TBB配置完畢,然後點擊Generate

3
、完成後在剛創建的子文件夾D:\Program Files\OpenCV2.1\vs2010下會出現一個VS2010的解決方案文件OPENCV.sln,雙擊打開後,出現OPENCV 2.1的所有工程項目,先不要著急編譯。

首先點擊Solution Explorer(解決方案資源管理器)裡面Property Manager(屬性管理器)下的選項卡,依次展開ALL_BUILD—Debug|Win32—右鍵單擊 Microsoft.Cpp.Win32.user,選擇Properties(屬性),然後選擇VC++ Directories(VC++目錄),在Executable Directories(可執行文件目錄)裡面將INTEL TBB 3.0的可執行路徑(bin)填寫到裡面,此處與LIB一樣,必須定位到VC10才可以,例如我的是D:\Program Files\Intel TBB 3.0\bin\ia32\vc10,將Include Directories(包含目錄)定位到Intel TBBInclude文件夾即可,無需再往深入定位,在Library Directories(庫目錄)裡填寫Intel TBBLIB文件位置,定位到VC10文件夾。

單擊確定之後,將選項卡切回到Solution Explorer(解決方案資源管理器),將編譯模式切換為Debug模式,右鍵單擊Solution OpenCV(解決方案OpenCV),選擇Rebuild Solution(重新生成解決方案),編譯後再右鍵單擊INSTALL項目,選擇Build(生成),之後將編譯模式切換為Release,重複 debug模式下的步驟。完成後在你的解決方案文件夾D:\Program Files\OpenCV2.1\vs2010里面會生成bin目錄,include目錄,lib目錄。

然後在VS2010里切回到Property Manager(屬性管理器),像上面一樣展開Microsoft.Cpp.Win32.user後選擇Properties(屬性),最後在VC++ Directories(VC++目錄)裡面增加子文件夾D:\Program Files\OpenCV2.1\vs2010下的可執行文件(bin),包含文件(include\opencv),以及庫文件(lib),源文件 (src\cvsrc\cvauxsrc\cxcoresrc\highguisrc\ml),確定,退出並保存更改。

檢查D:\Program Files\OpenCV2.1\vs2010\bin是否已經被加入到環境變量(我的電腦-屬性-環境變量)PATH,如果沒有,請加入。

到此OPENCV 2.1配置完成,以後建立OPENCV項目時都需在項目裡面添加依賴庫,方法是在Solution Explorer(解決方案資源管理器)裡面右鍵選擇項目,選擇Properties(屬性),然後在Linker(鏈接器)裡面選擇Input(輸 入),在依賴庫裡添加OPENCVLIB文件夾裡的LIB文件名稱即可,文件名後面有小寫字母「d」的為Debug(調試模式庫),沒有「d」的為 Release(發佈模式庫)

例如

active(debug)[活動(debug)]裡添加

cv210d.lib;cvaux210d.lib;cxcore210d.lib;highgui210d.lib;ml210d.lib;

release裡添加

cv210.lib ;cvaux210.lib ;cxcore210.lib ;highgui210.lib ;ml210.lib ;

留言

這個網誌中的熱門文章

C 和 C++ 的 Callback

C Callback Function with C++ Class 轉載於: http://lak4cyut.blogspot.tw/2008/08/c-callback-function-with-class.html 由於 C/C++ 語言的特性,許多 API 是必需要利用 Callback function 才能完成作用 在 C 的時代這是很合理也很直覺化的設計,但若將場景拉到 C++ 呢.... --此篇除了介紹 How 之外,也將對 Why 進行簡單的介紹,希望能夠令不知其所以然的人有所幫助。-- Effective C++m 一書將 C++ 視為一種語言聯邦,而其中最簡單及常被討論到的,我想大概是屬於 OOP 的部份。 在 C++ 中利用 Class 來實現 OO 的許多精神,許多的程式設計都會採用 OO 的封裝特性,也因此當你需要使用某些 API 時,會面臨到 callback function 設計不易的問題。包括如何取用物件內的屬性、如何將物件傳入等問題,假設利用 non-member function 來設計 callback function,為了能令 callback function 順利的存取相關的物件內的資料,可能會在某種程度上破壞掉物件的封裝性。 因此,若以封裝性的角度來看,我們當然會希望能夠直覺的以 class member function 來做為 callback function,如此一來,便可以在不破壞封裝性的情況下,依然順利的使用物件內的屬性。 在這個前提下,便會很直覺的寫出以下的程式段: class CMyClass { public: void Mainfunc() ; void CBfunc(void *) ; private: int iData ; int iInc ; } int CMyClass::CBfunc(void *iIncLoc) { int _i = (int)iIncLoc ; return iData+_i ; } void CMyClass::Mainfunc() { // APIfunc( *pCallback, *pParam) <-- br=""> APIfunc(CBfunc, i

c++(/clr)非託管類型和託管類型互轉

c++(/clr)非託管類型和託管類型互轉 轉載於: http://www.cnblogs.com/kekec/archive/2011/03/25.html 以下代碼必須有「Common Language Runtime Support(/clr)」 和「MFC」支持 1. 字符竄之間的轉換 1 // 託管類型到非託管類型 2 inline CString ManageToUnManageStr(System::String^ cmStr) 3 { 4 using namespace System::Runtime::InteropServices; 5 CString cStr = (char*)(Marshal::StringToHGlobalAnsi(cmStr)).ToPointer(); 6 return cStr; 7 } 8 9 // 非託管類型到託管類型 10 inline System::String^ UnManageToManageStr(const CString& cStr) 11 { 12 const char* cc = (LPCTSTR)cStr; 13 System::String^ cmStr = gcnew System::String(cc); 14 return cmStr; 15 } 2. 對象之間的轉換 1 // _variant_t到Object對象 2 inline System::Object^ VarToObject(_variant_t var) 3 { 4 using namespace System::Runtime::InteropServices; 5 System::IntPtr^ pvar = gcnew System::IntPtr(&var); 6 System::Object^ obj = Marshal::GetObjectForNativeVariant(*pvar); 7 return obj; 8 } 9 10 // Object對象到_variant_t 11 inline _variant_t* ObjectToVar(System::Object^ obj) 12 { 13 using namespace

難捨

每次星期天要和你道別的時候,心中總是有很多不捨。 只能告訴自己,很快的又能見面了。 在擁擠的火車上,思念還是停留在妳的身上。 那時深深的覺得,有一個能夠去呵護而值得愛的人,是一種幸福。