Opencv捕捉视频流并保存图片

一,保存所有帧

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

猜你喜欢

转载自blog.csdn.net/qq_28467367/article/details/91839065