opencv videocapture無法讀取視訊
阿新 • • 發佈:2019-02-17
opencv videocapture讀取視訊編譯通過,但執行時呼叫isOpened()返回false。沿著程式碼一步步Debug進去,發現如下程式碼:
CvCapture* cvCreateFileCapture_FFMPEG_proxy(const char * filename)
{
CvCapture_FFMPEG_proxy* result = new CvCapture_FFMPEG_proxy;
if( result->open( filename ))
return result;
delete result;
return 0;
}
在這裡,result->open失敗,說明ffmpeg庫出了問題。在cap_ffmpeg.cpp找到opencv呼叫ffmpeg庫的程式碼如下:
const char* module_name = "opencv_ffmpeg"
CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION)
#if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__)
"_64"
#endif
".dll";
在呼叫時ffmpeg庫時加上了opencv的版本號,因此將sources\3rdparty\ffmpeg下的opencv_ffmpeg.dll的庫改為opencv_ffmpeg2410.dll,如果編譯的是64位版本,則改為opencv_ffmpeg2410_64.dll,其他版本以此類推。然後將這個dll放到生成的exe目錄下即可正常讀取視訊。