首先注意,本文使用的是Visual c++ 2010 express,這意味着它有以下問題:
- 不能開發64位程序,除非另外下載編譯器並配置
- 只能針對項目(不能全局)設置include目錄、庫目錄等,每個新項目可能都需要設一次
但考慮到有很多人使用的是免費的Visual C++ express,所以本文也有一定意義。(我和朋友一起花了幾個小時才跑通這個例子,希望可以到幫助其它朋友)。
開發環境
- Windows 7 x64
- Visual C++ 2010 express
- OpenVC 2.4.2
- x86 32位
下載OpenCV
當前OpenCV的最新版本為2.4.2,我下載位於Sourceforge的windows版本。文件大小為212.56M,可能需要翻牆。
下載后,解壓到某處,我的目錄結構如下圖:
解壓即可,無須安裝。需要注意的是,當前版本已經包含了windows下的預編譯的庫,不用像以前那樣得先麻煩的編譯一遍。
注意其中的build目錄,我們需要用的東西都在它里面。
配置環境變量
環境變量中要增加bin路徑和tbb路徑。OpenCV中提供了多種版本,由於我現在只能用32位,所以在Path中增加如下:
E:\OpenCV\OpenCV-2.4.2\build\x86\vc10\bin;E:\OpenCV\OpenCV-2.4.2\build\common\tbb\ia32\vc10
如果你要用64位,則應該是:
E:\OpenCV\OpenCV-2.4.2\build\x64\vc10\bin;E:\OpenCV\OpenCV-2.4.2\build\common\tbb\intel64\vc10
配置完后,你需要把Visual c++關閉重新打開,以使環境變量生效(無啟重啟電腦)。
創建文字版Hello world項目
打開Visual C++ 2010 express,創建一個新項目(空項目):
在“源文件”下,創建一個hello.cpp:
把下面一段代碼復制到hello.cpp中:
#include <cv.h> #include <highgui.h> int main ( int argc, char **argv ) { cvNamedWindow( "My Window", 1 ); IplImage *img = cvCreateImage( cvSize( 240, 120 ), IPL_DEPTH_8U, 1 ); CvFont font; double hScale = 1.0; double vScale = 1.0; int lineWidth = 3; cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC, hScale, vScale, 0, lineWidth ); cvPutText( img, "Hello World!", cvPoint( 20, 40 ), &font, cvScalar( 255, 255, 0 ) ); cvShowImage( "My Window", img ); cvWaitKey(); return 0; }
可以看到會有很多編輯器中會提示很多錯誤,因為我們還沒有配置OpenCV的庫:
配置包含目錄
右鍵點項目“HelloWorld1”->“屬性”->“配置屬性”->“VC++ 目錄”,在“包含目錄”中增加:
E:\OpenCV\OpenCV-2.4.2\build\include E:\OpenCV\OpenCV-2.4.2\build\include\opencv E:\OpenCV\OpenCV-2.4.2\build\include\opencv2
如下圖:
配置庫目錄
在“庫目錄”中增加:
E:\OpenCV\OpenCV-2.4.2\build\x86\vc10\lib
如下圖:
配置附加依賴庫
在“鏈接器”->“輸入”->“附加依賴項”處增加:
opencv_calib3d242d.lib opencv_contrib242d.lib opencv_core242d.lib opencv_features2d242d.lib opencv_flann242d.lib opencv_gpu242d.lib opencv_haartraining_engined.lib opencv_highgui242d.lib opencv_imgproc242d.lib opencv_legacy242d.lib opencv_ml242d.lib opencv_nonfree242d.lib opencv_objdetect242d.lib opencv_photo242d.lib opencv_stitching242d.lib opencv_ts242d.lib opencv_video242d.lib opencv_videostab242d.lib
如下圖:
注意此處只配置了Debug的屬性,在Release中也需要類似配置,只是使用的lib與上面不同,后面少了一個d:
opencv_calib3d242.lib opencv_contrib242.lib opencv_core242.lib opencv_features2d242.lib opencv_flann242.lib opencv_gpu242.lib opencv_haartraining_engine.lib opencv_highgui242.lib opencv_imgproc242.lib opencv_legacy242.lib opencv_ml242.lib opencv_nonfree242.lib opencv_objdetect242.lib opencv_photo242.lib opencv_stitching242.lib opencv_ts242.lib opencv_video242.lib opencv_videostab242.lib
“確定”后,回到編輯窗口,可以看到前面的紅線提示都沒了:
運行項目
點擊“運行”按鈕,如果一切無誤,則會彈出下面這個有圖形界面的Hello world:
圖片版Hello world
文字版的Hello world實現了,現在來一個圖片版的Hello world,即顯示一張圖片。
創建HelloWorld2項目
這里基本與前面相同,只是代碼變了,如下:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #pragma comment( lib, "opencv_core242d.lib ") #pragma comment( lib, "opencv_highgui242d.lib" ) using namespace cv; int main ( int argc, char **argv ) { namedWindow( "show_image", WINDOW_AUTOSIZE ); Mat src = imread( "logo.png" ); imshow( "show_image", src ); char c = waitKey(0); return 0; }
它將讀取與最終產生的可執行程序同級的一張"logo.png"圖片,顯示出來。
獲取圖片資源
該圖片來自opencv官網的logo:
我們將它先保存到本地硬盤,放在"Visual Studio 2010\Projects\HelloWorld2\HelloWorld2\"目錄下(一定要保證圖片確定在該目錄下)。
把圖片添加到項目中
右鍵點“HelloWorld2項目”->“增加”->“現有項”,選中該logo.png。這時項目的“資源文件”下,就會多一個logo.png出來。
運行項目
點擊“運行”,如果一切無誤的話,則會出現如下效果:
可以看到,黑色的"OpenCV"文字因為與底色相同看不見了。右邊也多了一個豎條,是因為這張圖片太小了,比win7最小的窗口還要小。
至此,Hello world完成。