發現opencv2.2加了很多新東西,試着裝了一下,本來是想偷懶,直接下載vs2010版的文件,但是發現有些時候程序會莫名其妙崩潰。。。調了半天,最後下定決心自己編譯opencv。上網找了很久才找到真正正確的安裝方法,轉載一下
準備軟件:在安裝openCV之前,首先要保證機器中安裝了以下軟件:
1,C/C++編譯器。我使用的是visual-Studio2008 Professional,當然使用VC++2008也是可以的。
2,安裝CMake2.6或者最新版本。下載地址: http://www.cmake.org/cmake/resources/software.html 下載 Windows (Win32 Installer) 安裝。
3,安裝OpenCV2.2. 下載地址: http://www.opencv.org.cn/index.php/Download,要記住你自己的安裝路徑,我的安裝路徑是:D:/openCV/OpenCV2.2.
使用CMake編譯openCV:
安裝了以上3個軟件後,就需要使用CMake編譯openCV了
1, 運行cmake-gui,在where is the source code中填入你的openCV路徑:D:/openCV/OpenCV2.2;where to build the binaries中填入你要存放編譯結果的路徑:D:/openCV/OpenCV2.2/vs2008。
2, 點configure,在彈出的對話框中選擇Visual Studio 9 2008 。
3,如果有紅色框顯示,繼續點擊configure。
4,configure完成之後,點擊generate。
上述步驟完成之後,在vs2008文件夾中,就會看到有OpenCV.sln文件。
編譯OpenCV Debug和Release版本庫:
使用VS2008打開OpenCV.sln文件,在Debug下,選擇OpenCV.sln文件,然後進行如下操作:
在Debug下,選擇Solution Explorer裏的 Solution OpenCV,點右鍵,運行"Rebuild Solution";如編譯無錯誤,再選擇INSTALL項目,運行"Build"。
配置Windows環境變量:
將D:/openCV/OpenCV2.2/vs2008/bin加入到系統環境變量Path中。這個應該都會的吧。
(很重要,在這一步栽了跟頭)
path
D:/openCV/OpenCV2.2/vx2008/bin;
E:/Program Files/Microsoft Visual Studio/Common/Tools/WinNT;
E:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin;
E:/Program Files/Microsoft Visual Studio/Common/Tools;
E:/Program Files/Microsoft Visual Studio/VC98/bin;D:/Program Files/CMake 2.8/bin
爲VS2008 配置openCV環境:
1 打開VS 2008,菜單 Tools -> Options -> Projects and Solutions -> VC++ Directories
2 在Show directories for中,選擇include files,加入目錄 D:/openCV/OpenCV2.2/ include/opencv,和D:/openCV/OpenCV2.2/ include
3 在show directories for中,選擇library files,加入目錄 D:/openCV/OpenCV2.2/ lib
openCV使用:
1 打開VS 2008 Express,創建一個Win32控制檯程序openCVhello;
2 選擇Solution Explorer裏的openCVhello項目,點擊鼠標右鍵,選擇Properties,選擇Linker中Input。
3 在Additional Dependencies 中添加如下目錄:
D:/openCV/OpenCV2.2/vs2008/lib/opencv_core220d.lib D:/openCV/OpenCV2.2/vs2008/lib/opencv_highgui220d.lib D:/openCV/OpenCV2.2/vs2008/lib/opencv_video220d.lib D:/openCV/OpenCV2.2/vs2008/lib/opencv_ml220d.lib D:/openCV/OpenCV2.2/vs2008/lib/opencv_legacy220d.lib D:/openCV/OpenCV2.2/vs2008/lib/opencv_imgproc220d.lib
(其實我的如下配置就可以了)
opencv_core220d.lib opencv_imgproc220d.lib opencv_highgui220d.lib
opencv_core220.lib opencv_imgproc220.lib opencv_highgui220.lib
4 openCVhello的程序如下:
// openCVhello.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int _tmain(int argc, _TCHAR* argv[])
{
// open the file
IplImage *img = cvLoadImage("ant1.jpg");
if (!img)
{
printf("Error: could not open the image file./n");
return 1;
}
// display the image
cvNamedWindow("Image:",CV_WINDOW_AUTOSIZE);
cvShowImage("Image:",img);
// wait for the user to press a key in the GUI window
cvWaitKey(0);
// Free the resourse
cvDestroyWindow("Image:");
cvReleaseImage(&img);
return 0;
}
這樣,就可以成功運行~祝大家好運~
如果有不清楚的,可以參看官方網站:http://opencv.willowgarage.com/wiki/VisualC%2B%2B
一般,按照上述步驟就可以安裝成功的,我在xp上可以成功安裝,但在win7上遇到了問題,出現mscvp100d.dll不存在,出現異常,試論很多方法後都不能解決,最後一個很簡單的方法搞定了:將vs2008中的bin文件夾中所有的.dll文件和lib文件夾中的所有.lib文件拷到OpenCV2.2對應的文件夾中,覆蓋其相同文件,就可以了成功運行了~遇到同樣問題的可以試一下~
瘋子007童鞋翻譯了opencv 2.2的官方網站 ,在還沒有得到允許的情況下我就轉載了過來,讓我們掌聲感謝瘋子007 童鞋
總體修改和改進:
- 重新組織庫結構,用較詳細,更小的模塊來取代cxcore, cv, cvaux, highgui 和 ml庫
- opencv_core – core函數庫(基本的結構,架構和線性代數,DFT,xml 和yam i/o接口函數等)
- opencv_imgproc -圖像處理函數庫(濾波,高斯模糊,形態學膨脹/腐蝕,線性縮放圖像大小,圖像幾何變化,顏色結構變化,計算直方圖等)
- opencv_highgui – GUI,圖像和視頻接口函數庫
- opencv_ml -統計機器學習模型函數庫(SVM,決策樹,級聯等)
- opencv_features2d -二維特徵檢測器和描述子函數庫(SURF,FAST 等,包括一種新的特徵描述子匹配結構)
- opencv_video -動態分析和物體追蹤函數庫(光流法,移動模板,背景消除)
- opencv_objdetect -圖像目標檢測函數庫(haar小波 & LBP人臉檢測和識別,HOG人檢測等)
- opencv_calib3d -攝像頭標定,視覺匹配和三維數據處理函數庫
- opencv_flann -近似最近領域搜索庫和OpenCV分裝器
- opencv_contrib - 最新貢獻但不是很成熟的函數庫
- opencv_legacy -過時代碼,爲了後續代碼兼容性而存在
- opencv_gpu -用CUDA來加速一些openCV函數的類庫(相對不太穩定,但對openCV開發非常有幫助)
如果你用Cmake 或者pkg-config來進行配置openCV,如果沒有任何改動,你的源碼編譯會正常。否則,你需要修改連接參數(修改庫名)和更新頭文件路徑。
仍然支持使用#include <cv.h>等,但是備註修改爲 #include “opencv2/imgproc/imgproc.hpp”等等。
請查看新的c和c++例子文件,你會發現,這樣樣例的頭文件都採用了新的引用格式。如:https://code.ros.org/svn/opencv/trunk/opencv/samples/c/blobtrack_sample.cpp (這是我自己加的,原文沒有,便於大家查看)
- 新格式的分裝器覆蓋了更多的opencv2.x API,文檔和例子將在後面加上。爲了採用額外的函數庫,你需要numpy
SWIG-不在包含Python分裝器
- OpenCV現在支持Android開發(GSoC 2010 工程),一些樣例可以在http://opencv.willowgarage.com/wiki/Android 找到
- 完整全新的opencv_gpu加速器模塊由NVidida開發支持,詳細請看下面。
新的函數,特徵集
- core:
-
- cv::Matx<T, m, n> 可以增加給定類型,給定大小矩陣
Vec<T, n> 由 Matx<T, n, 1>派生,此類可被用於cv::Mat開銷過大時的小矩陣。此操作子可實現Matx 和 Mat相互轉換。
-
- cv::Mat ,cv::MatND 是同一類型: typedef cv::Mat cv::MatND. 考慮到很多函數沒有檢查矩陣維數,在用openCV處理3維,4維等高維矩陣時要小心。
- 實驗支持支持2.x/3.x特徵 (在Cmake參數選擇WITH_EIGEN2). 同時,可以實現Eigen2 matrices和cv::Mat相互轉換。詳情查看modules/core/include/opencv2/core/eigen.hpp.
- cv::Mat 支持”<<”操作。詳情查看 opencv/samples/cpp/cout_mat.cpp.
- cv::exp ,cv::log由於SSE2的優化,速度更快
- imgproc:
-
- 顏色轉換函數被重寫;
-
- RGB->Lab & RGB->Luv 得到明顯改善。函數假設sRGB輸入顏色空間(比如,gamma=2.2),如果你想要原始線性RGB->L**轉換 ,採用CV_LBGR2LAB
- VNG 算法增加了Bayer->RGB。雖然比簡單迭代算法慢了很多,但是更詳細的圖像信息
- 對8位圖增加了RGB->HSV/HLS 轉換函數 ,這裏H通道採用完整的 0..255 區域,而不是原來的0..179區域。轉換代碼爲CV_RGB2HSV_FULL等。
- initUndistortRectifyMap爲多角度攝像頭增添了專用變量: initWideAngleProjMap()
- features2d:
-
- 引入關鍵點檢測,計算描述子和匹配的統一架構。先前的一些可用和新的監測子和描述子,比如SURF,Fast, StarDetector 等,被分裝在這個架構中。這個架構的關鍵的特點(除了爲不同檢測子和描述子統一的API)是他爲圖像匹配和基於紋理的物體檢查提供了高層工具,詳情請看http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html
C++樣例:
-
-
- descriptor_extractor_matcher.cpp –採用關鍵點和描述子 從場景中查找物體
- generic_descriptor_matcher.cpp – 在物體上採用變動,可以使描述子計算不必太精確。
- bagofwords_classification.cpp –一個用這種架構處理VOC下載的數據的例子,VOC數據集:http://pascallin.ecs.soton.ac.uk/challenges/VOC/
- Ethan Rublee集成了由Michael Calonder提出的最新更快的關鍵點描述子BRIEF。例子請查看opencv/samples/cpp/video_homography.cpp
- SURF 關鍵點檢測子採用TBB (此模塊由 imahon 和yvo2m開發)進行並行計算
-
- objdetect:
-
- LatentSVM 物體檢查子,應用於P. Felzenszwalb的算法,由Nizhniy Novgorod State University (NNSU) team開發.詳情請查看opencv/samples/c/latentsvmdetect.cpp
- calib3d:
-
- 一種新的合理的標定模型:
x’ = x*(1 + k1 *r2 + k2 *r4 + k3 *r6 )/(1 + k4 *r2 + k5 *r4 + k6 *r6 ) + <tangential_distortion for x>,
y’ = y*(1 + k1 *r2 + k2 *r4 + k3 *r6 )/(1 + k4 *r2 + k5 *r4 + k6 *r6 ) + <tangential_distortion for y>
被引入。對廣角鏡頭的攝像頭標定很有用,因爲增加的參數可以優化你所提供數據和增加估計這些數據的魯棒性。 或者可以簡單的初始化畸變向量爲0,並 且 CV_CALIB_RATIONAL_MODEL +CV_CALIB_FIX_K3 + CV_CALIB_FIX_K4 + CV_CALIB_FIX_K5 或 者其他連接去選擇去增強或者取消一些係數
-
- 增加校正三目攝像頭(三目在同一水平線上),詳情請查看 samples/cpp/3calibration.cpp
- ml:
-
- 引入由NNSU工作組開發的梯度級聯樹模型
- highgui:
-
- 增加支持 Qt 後臺開發,源於由Yannick Verdie完成的GSoC 2010工程。後臺開發有一些新特徵沒有體現,如採用TTF字體的文字翻譯 ,獨立的控制面板,包括滾動條,按鈕,單選按鈕,複選按鈕,大小變化,圖像顯 示區,highgui 窗體, “保存”等等。詳情請看Yannick在youtube視頻演示新特徵:http://www.youtube.com/user/MrFrenchCookie#p/u
- 新的API被引入: http://opencv.willowgarage.com/documentation/cpp/highgui_qt_new_functions.html ,如果你機器上有 Qt SDK (或者 libqt4 開發包),可以採用新的API,並且採用QT編譯OpenCV (pass-DWITH_QT=ON to CMake; 注意結果,確認Qt爲GUI後臺編譯)
- 支持16位和LZW-壓縮TIFFs
- 支持Linux環境下IEEE1394 模式的攝像頭
- contrib:
-
- 增加Marius Muja,Antonella Cascitelli, Marco Di Stefano ,Stefano Fabri開發的斜面匹配算法. 詳情查看 samples/cpp/chamfer.cpp
- gpu:
-
- 這一部分是OpenCV的全新部分,由NVidia開發並支持。注意,此開發包處於測試階段,所以在開發時請注意和關注OpenCV SVN 的更新。
在採用gpu,需要安裝最新的 NVidia CUDA SDK ,並且採用CUDA 編譯OpenCV (-DWITH_CUDA=ON CMake flag).所有函數採用cv::gpu namespace命名空間。完整的函數和類在opencv/modules/gpu/include/opencv2/gpu/gpu.hpp,下面 是 API中一些主要組成部分:
-
- 圖像計算,濾波操作,形態學,幾何變換,直方圖計算
- 立體視覺匹配算法:塊匹配, Belief Propagation 和Constant-Space Belief Propagation.
- 基於HOG物體檢查子。It runs more than order of magnitude faster than the CPU version!
-
- See opencv/samples/gpu
- python bindings:
-
- 大量 OpenCV 2.x 函數被轉換爲Python 語言。
這些新的分裝需要安裝numpy (請查看http://opencv.willowgarage.com/wiki/InstallGuide ).
同理,C++ API,在python環境下,不需要定位輸出數組,他們會自動由相互函數創建,下面是一個小例子:
§ import cv
§
§ a=cv.imread(“lena.jpg”,0)
§ b=cv.canny(a, 50, 100, apertureSize=3)
§ cv.imshow(“test”,b)
§ cv.waitKey(0)
在例子中, a和 b 是普通 numpy 數組,所以OpenCV 函數完全支持numpy 和 scipy
PS.在你用opencv2.2的時候,記得庫已經不是原來的庫的,記得換庫
參考:http://www.cvchina.info/2010/12/13/chinese-opencv/
========================================================================
再寫一下後來發現的更換的函數吧
#include <cvaux.h>改爲
#include "opencv2/video/background_segm.hpp"
當然,還要在設置那裏加入opencv_video220.lib。