您现在的位置是:首页 >技术教程 >opencv_c++学习(六)网站首页技术教程

opencv_c++学习(六)

小小小~ 2024-06-14 17:17:59
简介opencv_c++学习(六)

一、视频加载与摄像头调用

视频、摄像头加载

VideoCapture(filename, CAP_ANY)

对以上实例解释如下:
若读取的为本地视频,则filename为视频名称,若读取的是摄像头数据,则为int类型的摄像头id。

视频属性的获取

视频属性可以通过get()函数获取。
在这里插入图片描述

视频中每一帧图像的获取

见文末案例

二、视频文件的保存

VideoWriter(fliename, fourcc, fps, framSize, isColor)

对以上实例进行解释:
filename:保存视频的地址和文件名,包含视频格式;
fourcc:压缩帧的4字符编解码器代码,详细参数在表2-7给出;
fps:保存视频的帧率,即视频中每秒图像的张数;
framSize:视频帧的尺寸;
isColor:保存视频是否为彩色视频;

三、读取视频的样例

int main() {

	//创建一个video对象
	VideoCapture video;

	//打开1.MP4文件
	video.open("./1.mp4");

	//判断视频是否打开成功
	if (video.isOpened())
	{
		cout << "错误" << endl;
		return -1;
	}

	//显示视频帧率
	video.get(CAP_PROP_FPS);

	//显示视频宽度
	video.get(CAP_PROP_FRAME_WIDTH);

	//显示每一帧的图像
	while (1)
	{
		Mat frame;
		video >> frame;

		if (frame.empty())
		{
			break;
		}
		//控制视频的快放与慢放,同时当视频读取完毕后会退出程序
		uchar c = waitKey(1000/ video.get(CAP_PROP_FPS));

		if (c == 'a')
		{
			break;
		}
	}
}		

四、读取并保存视频的样例

int main() {

	//创建一个video对象
	VideoCapture video;

	//打开1.MP4文件
	video.open("./1.mp4");

	//判断视频是否打开成功
	if (video.isOpened())
	{
		cout << "错误" << endl;
		return -1;
	}

	//显示视频帧率
	video.get(CAP_PROP_FPS);

	//显示视频宽度
	video.get(CAP_PROP_FRAME_WIDTH);

	//显示每一帧的图像

	Mat frame;
	video >> frame;

	if (frame.empty())
		{
		return -1;
		}

	//判断图像是否为彩色图像
	bool isColor = (frame.type() == CV_8UC3);

	//创建写对象的实例
	VideoWriter writer;

	//选择编码格式
	int codec = VideoWriter::fourcc('M', 'J', 'P', 'G');

	//设置写入视频的帧率
	double fps = 25.0;

	//设置保存视频的文件名称
	string filename = "1.avi";

	//创建保存文件的视频流
	writer.open(filename, codec, fps, frame.size(), isColor);

	if (!writer.isOpened())
	{
		cout << "失败" << endl;
		return -1;
	}

	while (1)
	{
		//检测是否保存完毕
		if (!video.read(frame))
		{
			break;
		}
		//写入视频流
		writer.write(frame);

		//显示图像
		imshow("Live", frame);

		uchar c = waitKey(50);

		//按ESC退出循环
		if (c == 27)
		{
			break;
		}
	}
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。