歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 使用OpenCV官方提供文件配置、靜態編譯並運行OpenCV-2.3.x/2.4.x實例

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

日期:2017/3/1 10:12:40   编辑:Linux編程
當我們需要測試程序,或者想將程序發給其他同事或者同學,以讓同事或者同學運行以測試程序性能或者邏輯是否恰當時,是不是還要他人也要像你當初開發程序時一樣一步一步的配置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. int main( int argc, char** argv ) {
  3. IplImage*img = cvLoadImage( argv[1] );
  4. cvNamedWindow("OpenCV", CV_WINDOW_AUTOSIZE );
  5. cvShowImage("OpenCV", img );
  6. cvWaitKey(0);
  7. cvReleaseImage(&img );
  8. cvDestroyWindow("OpenCV" );
  9. return( 0 );
  10. }
(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. #pragma comment( lib,"opencv_highgui241d.lib" )
  7. #pragma comment( lib,"opencv_core241d.lib" )
編譯程序,會發發現程序不能正常編譯(錯誤如圖2所示),這主要與MSVCRT.lib(MSVCR90.dll)有關。

圖2 編譯產生很多錯誤

Copyright © Linux教程網 All Rights Reserved