抽取视频中的帧并保存为图片


注:原创不易,转载请务必注明原作者和出处,感谢支持!

保存视频中的帧

利用OpenCV提供的VideoCapture类可以轻松实现保存视频中帧的功能。下面代码可以将一个视频文件中的所有帧抽取并保存成JPG图像。

videoName - 视频文件名
imagePath - 图片保存的路径
imagePrefix - 图片文件前缀字符串

图片完整路径:imagePath + "/" + imagePrefix + to_string(i) + ".jpg"

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;
}

抽取出的图片将被保存为:

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

red-forest45.jpg

posted @ 2019-04-30 19:23  wallace-rice  阅读(3031)  评论(0编辑  收藏  举报