OpenCV入門系列(2):Visual C++ 2010 express + OpenCV + x86的Hello world


首先注意,本文使用的是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,可能需要翻牆。

下載后,解壓到某處,我的目錄結構如下圖:

image

解壓即可,無須安裝。需要注意的是,當前版本已經包含了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,創建一個新項目(空項目):

image

在“源文件”下,創建一個hello.cpp:

image

把下面一段代碼復制到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的庫:

image

配置包含目錄

右鍵點項目“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

如下圖:

image

配置庫目錄

在“庫目錄”中增加:

E:\OpenCV\OpenCV-2.4.2\build\x86\vc10\lib

如下圖:

image

配置附加依賴庫

在“鏈接器”->“輸入”->“附加依賴項”處增加:

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

如下圖:

image

注意此處只配置了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

“確定”后,回到編輯窗口,可以看到前面的紅線提示都沒了:

image

運行項目

點擊“運行”按鈕,如果一切無誤,則會彈出下面這個有圖形界面的Hello world:

image

圖片版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出來。

image

運行項目

點擊“運行”,如果一切無誤的話,則會出現如下效果:

image

可以看到,黑色的"OpenCV"文字因為與底色相同看不見了。右邊也多了一個豎條,是因為這張圖片太小了,比win7最小的窗口還要小。

 

至此,Hello world完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM