簡體   English   中英

使用OpenCV閱讀mp4(Go Pro)視頻

[英]Reading mp4 (Go Pro) video using OpenCV

在Visual Studio 2013中使用OpenCV與C ++界面時,我在閱讀某些視頻文件時遇到困難。我已經能夠閱讀其他視頻格式,所以相信我的代碼是可以的。

問題視頻文件是使用Go Pro拍攝的,並且是mp4。 我可以在使用經典媒體播放器的OpenCV的同一台機器上播放它們。 我使用MediaInfo收集視頻文件的信息:

格式:MPEG-4格式配置文件:JVT編解碼器ID:avc1文件大小:126 MiB

我嘗試使用OpenCV的set函數顯式提供fourcc代碼,並提供divx作為代碼和avc1,但沒有運氣。

我的程序代碼如下:

int main(int argc, char** argv) {
    if (argc != 2) {
        help(argv);
        system("Pause");
        return 1;
    }

    std::string arg = argv[1];
    VideoCapture capture;
    capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('A', 'V', 'C', '1'));
    capture.open(arg);
    if (!capture.isOpened()) {
        cerr << "Failed to open video file!\n" << endl;
        help(argv);
        system("Pause");
        return 1;
    }
    return process(capture);
}

   void help(char** argv) {
        cout << "\n TBC" << endl;
    }

    int process(VideoCapture& src) {
        Scalar const LOW_HSV_THRESHOLD(120, 45, 75);
        Scalar const HIGH_HSV_THRESHOLD(140, 55, 85);
        string windowName[] = { "Original", "HSV", "In Range", "Binary"};
        namedWindow(windowName[0], CV_WINDOW_KEEPRATIO); 
        namedWindow(windowName[1], CV_WINDOW_KEEPRATIO); 
        namedWindow(windowName[2], CV_WINDOW_KEEPRATIO);
        namedWindow(windowName[3], CV_WINDOW_KEEPRATIO);
        Mat matOriginal;
        Mat matHsv;
        Mat matInRange;
        Mat dst;
        src >> matOriginal;

        cvtColor(matOriginal, matHsv, CV_BGR2HSV);
        GaussianBlur(matHsv, matHsv, Size(5, 5), 1.5);

        cvtColor(matOriginal, matInRange, CV_BGR2GRAY);
        threshold(matInRange, dst, 100, 255, THRESH_BINARY);
        //inRange(matHsv, LOW_HSV_THRESHOLD, HIGH_HSV_THRESHOLD, matInRange);
        imshow(windowName[0], matOriginal);
        imshow(windowName[1], matHsv);
        imshow(windowName[2], matInRange);
        imshow(windowName[3], dst);

        waitKey(0);
        return 0;
    }

}

任何幫助將非常感激。

非常感謝,

凱文

出於文檔目的,我已將我的評論擴展為此問題的解決方案。

用於Windows的預構建opencv庫可能尚未使用ffmpeg支持進行編譯,這使得可以讀取多種視頻格式。

一個quick'n'dirty解決方法是安裝ffmpeg並將其添加到Windows PATH環境變量。

但是,正確的解決方案是在安裝ffmpeg之后從源代碼構建opencv庫。 通過使用CMake-GUI可以簡化這一過程,它允許您輕松配置opencv的多個選項,例如添加ffmpeg支持( USE_FFMPEG標志)。 Cmake還將生成Visual Studio項目文件,以便您輕松編譯庫。

有關更詳細的指南,請查看官方opencv文檔頁面上的視頻指南

我找到了一個更快的解決方法,這對我有用:

在項目發布文件夾(C:\\ Users \\ Test \\ Projects \\ MyProject \\ Release)中復制文件opencv_ffmpeg2410.dll(2410來自opencv的使用版本,它可能與您不同)。 在Visual Studio中以發布模式運行項目,它可以工作。

您不需要進行任何其他修改:如果它可以讀取網絡攝像頭捕獲但不能讀取視頻文件,您只需將opencv_ffmpeg2410.dll復制到項目的Release文件夾中(您之前可能已復制其他已使用的dll的文件夾)來自opencv的bin文件夾)。 希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM