1.定义宏每隔几帧保存一帧
#define interval 4
2.读取视频
VideoCapture capture("E:/vs2017/mp4转jpg/mp4转jpg/video/video1.mp4");
3.判断视频是否被打开
if (!capture.isOpened()) {
return -1;
}
4.把视频内容写入Mat里
Mat frame;
capture >> frame;
5.写入图像
int imgIndex = 0;
while (!frame.empty()) {
string output = "E:/vs2017/mp4转jpg/mp4转jpg/video/" + to_string(imgIndex) + ".jpg";
//interval每隔几帧采集一张图片
if (imgIndex % interval == 0) {
//第一个参数是写入的文件名,第二个参数是Mat类型的图像数据。
imwrite(output, frame);
}
imgIndex++;
capture >> frame;
}
完整程序:
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
#define interval 4 //修改这里以改变多久保存一帧
int main()
{
VideoCapture capture("E:/vs2017/mp4转jpg/mp4转jpg/video/video1.mp4");
if (!capture.isOpened()) {
return -1;
}
int imgIndex = 0;
Mat frame;
capture >> frame;
while (!frame.empty()) {
string output = "E:/vs2017/mp4转jpg/mp4转jpg/video/" + to_string(imgIndex) + ".jpg";
if (imgIndex % interval == 0) {
//第一个参数是写入的文件名,第二个参数是Mat类型的图像数据。
imwrite(output, frame);
}
imgIndex++;
capture >> frame;
}
return 0;
}