通过opencv加载、保存视频

【欢迎关注编码小哥,学习更多实用的编程方法和技巧】

代码举例:

//opencv加载本地视频文件的2种方法
//方法一:
#if 0
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
//using namespace cv;

int main()
{
	// 创建VideoCapture对象
	cv::VideoCapture capture;

	// 打开视频文件
	capture.open("D:/opencv/videos/xxx.mp4");

	// 检查视频是否成功打开
	if (!capture.isOpened())
	{
		std::cout << "无法打开视频!" << std::endl;
		return -1;
	}

	std::cout << "视频加载成功" << std::endl << std::endl;

	// 获取视频信息 - 帧宽和帧高
	double frameWidth = capture.get(cv::CAP_PROP_FRAME_WIDTH);
	double frameHeight = capture.get(cv::CAP_PROP_FRAME_HEIGHT);
	std::cout << "视频帧宽为: " << frameWidth << std::endl;
	std::cout << "视频帧高为: " << frameHeight << std::endl;

	// 获取视频信息 - 帧率
	double frameRate = capture.get(cv::CAP_PROP_FPS);
	std::cout << "视频帧率为: " << frameRate << std::endl;

	// 获取视频信息 - 总帧数
	double totalFrames = capture.get(cv::CAP_PROP_FRAME_COUNT);
	std::cout << "视频总帧数为: " << totalFrames << std::endl;

	// 循环读取视频帧
	cv::Mat frameImg;
	long nCount = 1;
	while (true)
	{
		// 读取当前帧
		capture >> frameImg;

		// 显示当前帧
		if (!frameImg.empty())
		{
			imshow("当前帧", frameImg);
			if (char(cv::waitKey(int(1000 / frameRate))) == 'q') // 按'q'键退出
				break;
		}
		else
		{
			break;
		}

		nCount++;
	}

	// 释放视频资源
	capture.release();
	cv::waitKey(1);
	cv::destroyAllWindows();
	return 0;
}
#endif

//方法二:
#if 0
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
	// 创建VideoCapture对象
	VideoCapture capture;

	// 打开视频文件
	capture.open("D:/opencv/videos/big_buck_bunny.mp4");

	// 检查视频是否成功打开
	if (!capture.isOpened())
	{
		std::cout << "无法打开视频!" << std::endl;
		return -1;
	}

	std::cout << "视频加载成功" << std::endl << std::endl;

	// 获取视频信息 - 帧宽和帧高
	double frameWidth = capture.get(CAP_PROP_FRAME_WIDTH);
	double frameHeight = capture.get(CAP_PROP_FRAME_HEIGHT);
	std::cout << "视频帧宽为: " << frameWidth << std::endl;
	std::cout << "视频帧高为: " << frameHeight << std::endl;

	// 获取视频信息 - 帧率
	double frameRate = capture.get(CAP_PROP_FPS);
	std::cout << "视频帧率为: " << frameRate << std::endl;

	// 获取视频信息 - 总帧数
	double totalFrames = capture.get(CAP_PROP_FRAME_COUNT);
	std::cout << "视频总帧数为: " << totalFrames << std::endl;

	// 循环读取视频帧
	Mat frameImg;
	int nCount = 1;
	while (true)
	{
		// 读取当前帧
		capture >> frameImg;

		// 显示当前帧
		if (!frameImg.empty())
		{
			imshow("当前帧", frameImg);
			if (char(waitKey(int(1000 / frameRate))) == 'q') // 按'q'键退出
				break;
		}
		else
		{
			break;
		}

		nCount++;
	}

	// 释放视频资源
	capture.release();
	waitKey(1);
	destroyAllWindows();

	return 0;
}
#endif

//从摄像头读取视频流
#if 0
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
	// 创建VideoCapture对象
	VideoCapture capture;

	// 打开摄像头
	capture.open(0,CAP_DSHOW);

	// 检查摄像头是否成功打开
	if (!capture.isOpened())
	{
		std::cout << "无法打开摄像头!" << std::endl;
		return -1;
	}

	std::cout << "摄像头加载成功" << std::endl << std::endl;

	// 获取摄像头信息 - 帧宽和帧高
	double frameWidth = capture.get(CAP_PROP_FRAME_WIDTH);
	double frameHeight = capture.get(CAP_PROP_FRAME_HEIGHT);
	std::cout << "摄像头帧宽为: " << frameWidth << std::
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编码小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值