一,保存所有帧
#include "stdafx.h"
#include <time.h>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void VedioToImg()
{
char image_name[30];
int i = 0;
VideoCapture cap(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 960);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 540);
namedWindow("save", WINDOW_AUTOSIZE);
Mat frame;
while (1)
{
cap >> frame;
//显示时分秒
struct tm t; //tm结构指针
time_t now; //声明time_t类型变量
char ch[64];
time(&now); //获取系统日期和时间
localtime_s(&t, &now);//获取当地日期和时间
int len = strftime(ch, sizeof(ch), "%Y-%m-%d %H:%M:%S", &t); //年-月-日 时-分-秒
putText(frame, ch, cvPoint(30, 70), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(255, 200, 200), 1, CV_AA);
imshow("save", frame);
sprintf(image_name, "%s%d%s", "img", ++i, ".jpg");
//vector<int> compression_params;
//compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
//compression_params.push_back(100);
//imwrite("pic\\" + string(image_name), frame, compression_params);
imwrite("pic\\" + string(image_name), frame);
if (waitKey(10) == 27) break;
}
destroyWindow("save");
cap.release();
waitKey(0);
}
int main()
{
VedioToImg();
return 0;
}
二、保存任意帧数
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <fstream>
using namespace std;
using namespace cv;
void Calibimage()
{
ofstream fimage("calibdata.txt");
char image_name[30];
int i = 0;
VideoCapture cap(0);
namedWindow("vedio", 1);
Mat frame;
while (1)
{
char key= waitKey(1);
cap >> frame;
imshow("vedio", frame);
//if (key == 27) break;
if (i==10) break;
if (key==32)
{
sprintf(image_name, "img%d.jpg", ++i);
imwrite("pic\\" + string(image_name), frame);
imshow("image", frame);
fimage << string(image_name) << endl;
cout << "img" << i << " is saved" << endl;
}
}
destroyWindow("vedio");
cap.release();
//waitKey(0);
}
int main()
{
Calibimage();
return 0;
}