抽取視頻中的幀並保存爲圖片


注:原創不易,轉載請務必註明原做者和出處,感謝支持!ide

保存視頻中的幀

利用OpenCV提供的VideoCapture類能夠輕鬆實現保存視頻中幀的功能。下面代碼能夠將一個視頻文件中的全部幀抽取並保存成JPG圖像。spa

videoName - 視頻文件名
imagePath - 圖片保存的路徑
imagePrefix - 圖片文件前綴字符串rest

圖片完整路徑:imagePath + "/" + imagePrefix + to_string(i) + ".jpg"code

void ExtractFrames(const string &videoName, const string &imagePath, const string &imagePrefix)
{
    VideoCapture cap;
    Mat img;

    // 打開視頻
    cap.open(videoName);
    if (!cap.isOpened())
    {
        cout << "Error : could not load video" << endl;
        exit(-1);
    }

    // 取得視頻幀數
    size_t count = (size_t)cap.get(CV_CAP_PROP_FRAME_COUNT);
    for (size_t i = 0; i < count; ++i)
    {
        cap >> img;
        string imgName = imagePath + "/" + imagePrefix + to_string(i) + ".jpg";
        // 將當前幀保存
        imwrite(imgName, img);
        cout << "Frames " << i << " ... done" << endl;
    }
}

ExtractFrames調用實例:視頻

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char *argv[])
{
    ExtractFrames("E:/images/video/1.mp4", "E:/images/video", "red-forest");

    return 0;
}

抽取出的圖片將被保存爲:blog

red-forest0.jpg
red-forest1.jpg
red-forest2.jpg
...

red-forest45.jpg
圖片

相關文章
相關標籤/搜索