直接上代码:
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace std;
using namespace cv;
void Video2Images(char* video_path)
{
VideoCapture cap(video_path);
float rate = cap.get(CV_CAP_PROP_FPS);
long totalFrameNumber=cap.get(CV_CAP_PROP_FRAME_COUNT);
cout<<"rate: "<<rate<<" "<<"totalFrameNumber: "<<totalFrameNumber<<endl;
Mat img;
int count = 0;
int start_s = 1, end_s = 2; //设置截取的开始和结束时间
while (cap.read(img)) //读取视频帧
{
count++;
if ((count > rate * start_s) && (count <= rate * end_s)){
int i = 1;
cout<<"i: "<<i<<endl;
i++;
char image[50]; //保存路径
sprintf(image, "%d.jpg", i);
//sprintf(image, "img%d.jpg", i); 保存在img文件下,记得提前在当前路径下新建img文件
imwrite(image, img); //保存图像
}
if (count > rate * end_s)
break;
}
}
主函数调用:
int main( int argc, char** argv) {
Video2Images(argv[1]);
return 0;
}
// ./Test test.mp4