歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

使用OpenCV官方提供文件配置、靜態編譯並運行OpenCV-2.3.x/2.4.x實例

當我們需要測試程序,或者想將程序發給其他同事或者同學,以讓同事或者同學運行以測試程序性能或者邏輯是否恰當時,是不是還要他人也要像你當初開發程序時一樣一步一步的配置OpenCV運行環境!?如果不做這些,還會提示像圖1所示的系統錯誤(無法啟動程序,因為計算機中丟失“opencv_highgui241d.dll。嘗試重新安裝該程序以解決此問題”),這是不是太麻煩了,其實我們可以將程序以靜態鏈接的方式編譯,如此便少去了配置運行時環境的步驟了。

圖1  動態編譯的程序在未配置OpenCV的機器上運行提示系統錯誤

靜態編譯,也就是說編譯後的程序可以直接拷貝到其他機器上並能直接運行。而不需附帶鏈接庫和配置環境變量。

由於OpenCV自2.3.0版本開始就提供了OpenCV-2.3.x -win-superpack.exe或OpenCV-2.4.x.exe文件,該文件解壓後我們會發裡面有個名為“build”的文件夾,其中有各個平台的鏈接庫,而且還提供了Windows平台下的靜態鏈接庫,本文主要講述一個例子以說明如何配置使用該靜態鏈接庫。

像前面(OpenCV2.3.x/2.4.x在Visual Studio2005/2008和Visual Studio2010配置方法詳解 http://www.linuxidc.com/Linux/2012-08/68302.htm)放置OpenCV庫文件配置VC++目錄選項,並且配置環境變量(這一步可以不配置,但要在VC++目錄中將OpenCV的“bin”目錄添加到“VC++ 可執行文件”目錄選項中),注意這裡使用的庫目錄是“staticlib”而不是“lib”,這裡不多贅述。

配置完Visual Studio 2008中的VC++目錄後便可以編寫代碼了。

(1)編輯代碼

“新建項目”,選擇“Visual C++-空項目”,輸入項目名“StaticOpenCV”,“添加新項-代碼-C++ 文件”,輸入文件名“StaticOpenCV.cpp”,編輯代碼,這裡本人使用的測試代碼如下所示:

  1. #include <opencv/highgui.h>   
  2.    
  3. int main( int argc, char** argv ) {  
  4.          IplImage*img = cvLoadImage( argv[1] );  
  5.          cvNamedWindow("OpenCV", CV_WINDOW_AUTOSIZE );  
  6.          cvShowImage("OpenCV", img );  
  7.          cvWaitKey(0);  
  8.          cvReleaseImage(&img );  
  9.          cvDestroyWindow("OpenCV" );  
  10.    
  11.          return( 0 );  
  12. }  
(2)添加附加依賴項有兩種方法,見《OpenCV 2.3.x/2.4.x在Visual Studio 2005/2008和Visual Studio 2010配置方法詳解》一文。

    OpenCV-2.4.1庫文件列表(使用的時候適當選擇,這裡我要用的是libjasperd.lib、libjpegd.lib、libpngd.lib"、libtiffd.lib、zlibd.lib(注意這幾個必須要用的,因為這些是OpenCV所使用的第三方庫)和opencv_highgui241d.lib、opencv_core241d.lib庫文件。

  1. libjasper.lib  
  2. libjasperd.lib  
  3. libjpeg.lib  
  4. libjpegd.lib  
  5. libpng.lib  
  6. libpngd.lib  
  7. libtiff.lib  
  8. libtiffd.lib  
  9. opencv_calib3d241.lib  
  10. opencv_calib3d241d.lib  
  11. opencv_contrib241.lib  
  12. opencv_contrib241d.lib  
  13. opencv_core241.lib  
  14. opencv_core241d.lib  
  15. opencv_features2d241.lib  
  16. opencv_features2d241d.lib  
  17. opencv_ffmpeg241.dll  
  18. opencv_flann241.lib  
  19. opencv_flann241d.lib  
  20. opencv_gpu241.lib  
  21. opencv_gpu241d.lib  
  22. opencv_haartraining_engine.lib  
  23. opencv_haartraining_engined.lib  
  24. opencv_highgui241.lib  
  25. opencv_highgui241d.lib  
  26. opencv_imgproc241.lib  
  27. opencv_imgproc241d.lib  
  28. opencv_legacy241.lib  
  29. opencv_legacy241d.lib  
  30. opencv_ml241.lib  
  31. opencv_ml241d.lib  
  32. opencv_nonfree241.lib  
  33. opencv_nonfree241d.lib  
  34. opencv_objdetect241.lib  
  35. opencv_objdetect241d.lib  
  36. opencv_photo241.lib  
  37. opencv_photo241d.lib  
  38. opencv_stitching241.lib  
  39. opencv_stitching241d.lib  
  40. opencv_ts241.lib  
  41. opencv_ts241d.lib  
  42. opencv_video241.lib  
  43. opencv_video241d.lib  
  44. opencv_videostab241.lib  
  45. opencv_videostab241d.lib  
  46. zlib.lib  
  47. zlibd.lib  

為方便我們知道到我們到底需要使用哪些庫文件,這裡我們使用《OpenCV2.3.x/2.4.x在Visual Studio2005/2008和Visual Studio2010配置方法詳解 http://www.linuxidc.com/Linux/2012-08/68302.htm》一文中所講述的第二種方法添加程序依賴庫。我們在頭文件與主函數之間添加如下代碼:

  1. #pragma comment( lib,"libjasperd.lib" )   
  2. #pragma comment( lib,"libjpegd.lib" )   
  3. #pragma comment( lib,"libpngd.lib" )   
  4. #pragma comment( lib,"libtiffd.lib" )   
  5. #pragma comment( lib, "zlibd.lib")   
  6.    
  7. #pragma comment( lib,"opencv_highgui241d.lib" )   
  8. #pragma comment( lib,"opencv_core241d.lib" )  
編譯程序,會發發現程序不能正常編譯(錯誤如圖2所示),這主要與MSVCRT.lib(MSVCR90.dll)有關。

圖2  編譯產生很多錯誤

Copyright © Linux教程網 All Rights Reserved