OpenCV學習心得(1) -- OpenCV的安裝

来源:互联网 发布:人工智能报告2000字 编辑:程序博客网 时间:2024/05/22 00:15

轉載請注明出處與作者.

最近需要用OpenCV寫一個工具.找來很多的文章來學習.但是發現不是英文的就是說的不清不楚的(至少對我的水平來說太高深了)..自己只好把自己的經驗寫下來以便以後查詢.

我是從網站上直接下載的二進制文件(貌似是win32系統用的..win64系統要用cmake重編譯.有需要的話再到其他的博客查吧..我現在用不到),下面說的文件你要是沒有的話就用cmake build吧..

首先用VS2010創建一個工程,然後在工程目錄下新建一個文件夾,我建的是OpenCV,然後建立3個子目錄,分別是dll,lib,include, 

dll 目錄是用來放置 所有OpenCV要用到的dll文件的,發行的時候將這裡的文件同你的執行程式放在一起發行.

lib目錄是用來放置 所有OpenCV要用到lib庫的.

include目錄是放置頭文件的.

下面提到的小寫opencv目錄是指從網上下載的opencv壓縮檔解壓縮后的目錄.

首先將opencv\build\include 中的opencv和opencv2兩個目錄全部拷貝到OpenCV\include中.

再將opencv\build\x86\vc10\lib中的所有文件全部拷貝到OpenCV\lib中.

再將opencv\build\x86\vc10\bin中的所有文件全部拷貝到OpenCV\dll中.

然後需要用Cmake和VS2010將opencv\3rdparty下的文件進行編譯,編譯完成后執行下面的步驟:

將opencv\3rdparty\build\3rdparty\Debug下面的*.lib文件重命名成*d.lib(加一個d字符,表示是debug版本),然後拷貝到OpenCV\lib下.

將opencv\3rdparty\build\3rdparty\Release下面的*.lib文件拷貝到OpenCV\lib下.

將opencv\build\common\tbb\ia32\vc10下的所有.dll文件拷貝到OpenCV\dll下.

將opencv\build\common\tbb\ia32\vc10\irml下的.dll文件拷貝到OpenCV\dll下.

複製一份tbb.dll,然後重命名為tbb_debug.dll,這是因為使用debug模式的時候需要這個dll,但是我們又不對這個dll進行debug,所以直接用relese版本的.

這樣我們需要的文件都在dll,lib,include這3個目錄下了.可以把它們保存好,以後再新建工程的話直接將這3個文件夾拷貝過去就行了.

在工程的屬性對話框中->Configuration properties->VC++ Directories->Include Directories中加入如下3個路徑

$(SolutionDir)OpenCV\include

$(SolutionDir)OpenCV\include\opencv

$(SolutionDir)OpenCV\include\opencv2

在工程的屬性對話框中->Configuration properties->VC++ Directories->Include Directories中加入如下路徑: $(SolutionDir)OpenCV\lib

在工程的屬性對話框中->Configuration properties->Linker->Input->Additional Dependencies中加入如下文件:

Debug模式下加入*d.lib文件

zlibd.lib
libtiffd.lib
libpngd.lib
libjpegd.lib
libjasperd.lib
opencv_video231d.lib
opencv_ts231d.lib
opencv_objdetect231d.lib
opencv_ml231d.lib
opencv_legacy231d.lib
opencv_imgproc231d.lib
opencv_highgui231d.lib
opencv_haartraining_engined.lib
opencv_gpu231d.lib
opencv_flann231d.lib
opencv_features2d231d.lib
opencv_core231d.lib
opencv_contrib231d.lib
opencv_calib3d231d.lib

Release模式下加入*.lib文件.(不是以d結尾的)

zlib.lib
libtiff.lib
libpng.lib
libjpeg.lib
libjasper.lib
opencv_video231.lib
opencv_ts231.lib
opencv_objdetect231.lib
opencv_ml231.lib
opencv_legacy231.lib
opencv_imgproc231.lib
opencv_highgui231.lib
opencv_haartraining_engine.lib
opencv_gpu231.lib
opencv_flann231.lib
opencv_features2d231.lib
opencv_core231.lib
opencv_contrib231.lib
opencv_calib3d231.lib

可以建立一個文本文件將這兩個列表保存下來,以後直接拷貝即可.

將工程分別用Debug模式和Release模式 進行bilde一次,這樣在工程目錄下就會生成Debug和Release目錄.

然後將OpenCV\dll目錄中的文件分別拷貝到這兩個目錄中.(Release目錄中可以將以d結尾的文件刪除..).

這樣就設定完了.發行的時候直接將Release文件夾下的文件打包就可以了...


有幾個問題要注意一下:

1. MFC最好是使用靜態鏈接庫與Use Multi-Byte Character Set ,因為OpenCV提供的函數都是單字節的.如果用Unicode MFC,則在使用OpenCV函數前需要將字符進行轉換成單字節模式.(這個好麻煩).

2. OpenCV中使用的std::vector需要預先申請空間(也就是不要指望OpenCV函數幫你申請空間).否則會內存出錯.

例如 

//std::vector<cv::Mat> mv;  //這一句會出現內存錯誤.

//std::vector<cv::Mat> mv(3); //這一句正確,預先申請了3個Mat空間.

cv::Split(src,mv);

原创粉丝点击