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

原创 2012年03月21日 17:10:47

轉載請注明出處與作者.

最近需要用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);

相关文章推荐

opencv学习心得(一)鼠标响应事件绘制轮廓

//#include "gaosi.h" #include #include #include using namespace cv; using namespace std; //声明全局变...

opencv学习心得(六)新版本绘制外形轮廓

最近在研究opencv2.3.1版本函数,因为函数结构使用C++类型的,所以在一些函数调用上有很多差别,但是在运行速度上提高不少,所以还是新版本好用。其实在新版本发布是,会有相关的使用手册,很多例子会...

c++和opencv学习心得

1.表达式a^2中,a必须为int型的,而pow(a,2)中a可以是float型的;2.sqrt(b),b在c++下为float或double long型,在c下一般为double型;(msdn:C+...
  • ycx2006
  • ycx2006
  • 2011年03月10日 21:44
  • 733

OpenCV學習心得(11) -- Mat類型與Arraya

轉載請注明出處與作者 下面對Mat矩陣進行一些說明: 1. cv::Mat中的數據不需要釋放.cv::Mat會自動釋放. 例如,cv::Mat m=cv::imread("123.jpg")...

OpenCV學習心得(7) -- 閾值處理

轉載請注明出處與作者 OpenCV提供了2個函數來處理閾值. 第一個函數 double threshold(InputArray src, OutputArray dst, double thr...

OpenCV學習心得(8) -- 直方圖的顯示

轉載請注明出處與作者 這裡只討論1維的直方圖 void calcHist(const Mat* arrays, int narrays, const int* channels, InputArr...

OpenCV學習心得(6) -- 圖像的縮放

轉載請著名出處與作者 OpenCV提供了一個實現圖像縮放的函數:cv::resize void resize(InputArray src, OutputArray dst, Size dsize...

opencv学习心得(六)新版本绘制外形轮廓。

最近在研究opencv2.3.1版本函数,因为函数结构使用C++类型的,所以在一些函数调用上有很多差别,但是在运行速度上提高不少,所以还是新版本好用。其实在新版本发布是,会有相关的使用手册,很多例子会...

OpenCV學習心得(5) -- 圖像通道分離

轉載請注明出處與作者 OpenCV提供了一個函數可以進行通道的分離,就是 cv::split. void split(const Mat& mtx, vector& mv); void sp...

opencv学习心得(四)——opencv提取截获图像

首先确定选区区域,这里利用鼠标选取区域具体操作看opencv学习心得(一)。 下面就是从感兴趣区域选取图像。 第一:创建图像空间,大小与rect相同。 第二:利用setroi选取区域。 第三:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV學習心得(1) -- OpenCV的安裝
举报原因:
原因补充:

(最多只允许输入30个字)