抽取视频中的帧并保存为图片
目录
注:原创不易,转载请务必注明原作者和出处,感谢支持!
保存视频中的帧
利用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