1. 程式人生 > >【OpenCV筆記 11】VS2013中執行OpenCV 3.0時常見錯誤及解決方法

【OpenCV筆記 11】VS2013中執行OpenCV 3.0時常見錯誤及解決方法

===========2016年10月29日更新=================

本次在筆記本中安裝VS2015和OPENCV 3.1.0參照毛新雲的教程的出現了諸多問題,

最後按照這篇部落格的步驟才算安裝成功!

==========================================

常見案例、錯誤及解決方法:

=====================================================================

案例:編譯VC++程式的時候出現如下提示警告:
warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

警告解釋:
因為只是一個warning,不影響正常編譯,所以並沒有引起大家多大的關注。我一開始的時候也是如此。但是後來出現的次數多了,發現這個警告和在程式Debug的時候
無法停在斷點,刷刷刷就過去了根本無法進行Debug。而罪魁禍首就是這個warning,改正了這個warning就能進行Debug了。下面講述我是怎麼消除這個警告的。
這個警告的意思是:在該檔案中有一個或多個字元不是Unicode字元!要求把這個字元變成Unicode字元。
難題:在編譯資訊裡並沒有提示是哪個字元,或者是在哪一行裡出現的該字元。查詢起來非常的難,甚至是不可能的任務!


解決方法:

打開出現warning的檔案(在output欄雙擊警告處),Ctrl+A全選,然後在檔案選單:file->advanced save options ,在彈出的選項中選擇新的編碼方式為:UNICODE codepage 1200 ,點選確定,問題就解決了。

=======================================================================

案例:無法啟動此程式 因為計算機中丟失opencv_core310d.dll,或者類似下面的擴充套件檔案。

opencv_calib3d310d.dll
opencv_core310d.dll
opencv_features2d310d.dll
opencv_flann310d.dll
opencv_highgui310d.dll
opencv_imgcodecs310d.dll
opencv_imgproc310d.dll
opencv_ml310d.dll
opencv_objdetect310d.dll
opencv_photo310d.dll
opencv_shape310d.dll
opencv_stitching310d.dll
opencv_superres310d.dll
opencv_ts310d.dll
opencv_video310d.dll
opencv_videoio310d.dll
opencv_videostab310d.dll

解決方法:

===========================================================================

案例一:IplImage格式轉換成Mat格式  

//使用Mat的建構函式: Mat::Mat(const IplImage* img, bool copyData=false);預設情況下copyData為false
IplImage* srcImg = cvLoadImage("Lena.jpg");
//注意:以下三種效果一致,均為淺拷貝
Mat M(srcImg);
Mat M(srcImg, false);
Mat M = srcImg;
//注意:當將引數copyData設為true後,則為深拷貝(複製整個影象資料)
Mat M(srcImg, true);

錯誤提示:

error C2664: 'cv::Mat::Mat(const cv::cuda::GpuMat &)' : cannot convert argument 1 from 'IplImage *' to 'const cv::Mat &'

Reason:cannot convert from 'IplImage *' to 'const cv::Mat'

解決方法:

Mat img;

IplImage *frame=&(IplImage)img;//frame為IplImage 型別,img為Mat型別

==========================================================================

案例二:首次執行沒有錯誤,再次執行且沒有修改程式碼時出現下列錯誤

錯誤提示:

LINK : fatal error LNK1168: cannot open C:\Users\Administrator\Documents\Visual Studio 2013\Projects\OpenCv3\C7_OpenCV\Debug\C7_OpenCV.exe for writing

解決方法:意思不能開啟xxx.exe檔案用於改寫,說明xxx.exe檔案正在執行,所以只要關閉第一次執行時生成的圖形視窗即可,這個問題我遇到過多次,每次都是重啟VS2013很麻煩,偶然試著將先前生成的圖形視窗關閉後再次執行即恢復正常。

================================================================

解決方案: 轉自http://stackoverflow.com/questions/32932915/opencv-3-0-0-configure-fails-ffmpeg-not-downloaded/33095689#33095689

1、將opencv\build\bin\下的opencv_ffmpeg310.dll改名為opencv_ffmpeg.dll;

opencv_ffmpeg310_64.dll改名為opencv_ffmpeg_64.dll,然後拷貝到opencv\sources\3rdparty\ffmpeg\

2、將opencv\sources\3rdparty\ffmpeg\ffmpeg.cmake檔案內容用記事本修改為

  1. set(HAVE_FFMPEG 1)  
  2. set(HAVE_FFMPEG_CODEC 1)  
  3. set(HAVE_FFMPEG_FORMAT 1)  
  4. set(HAVE_FFMPEG_UTIL 1)  
  5. set(HAVE_FFMPEG_SWSCALE 1)  
  6. set(HAVE_FFMPEG_RESAMPLE 0)  
  7. set(HAVE_GENTOO_FFMPEG 1)  
  8. set(ALIASOF_libavcodec_VERSION 56.41.100)  
  9. set(ALIASOF_libavformat_VERSION 56.36.101)  
  10. set(ALIASOF_libavutil_VERSION 54.27.100)  
  11. set(ALIASOF_libswscale_VERSION 3.1.101)  
  12. set(ALIASOF_libavresample_VERSION 2.1.0)  
3、點選執行Cmake-gui

==================================================================

案例四:OpenCV3.0 CMake生成工程專案過程中遇到下載ippicv_windows_20151201.zip錯誤

最新版本:
(2)將上面的ZIP檔案放在OpenCV300的目錄下面,
筆者的路徑是下面這個:D:\OpenCV300\opencv\sources\3rdparty\ippicv\downloads\windows-b59f865d1ba16e8c84124e19d78eec57
(3)開啟CMake,重新生成工程檔案即可。

(4)最終配置成功如下圖: