1. 程式人生 > >opencv videocapture無法讀取視訊

opencv videocapture無法讀取視訊

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目錄下即可正常讀取視訊。