opencv学习记录——(7)视频读取与写入

一、VideoCapture 常用函数功能

1)open()------打开视频文件或者摄像头

2)isopened()-------判断打开的视频文件是否正确,正确返回true

3)release()------关闭视频流文件

4)grab()------抓取下一帧的视频文件或设备

5)Retrieve()------解码并返回视频帧

6)get()------返回指定视频的参数信息

7)set()------设置信息类的一个属性

二、读取视频的两种方式

1)VideoCapture cap;

cap.open("E//1.avi"); //此处需要注意,路径一定要用双//

2) VideoCapture cap ("1.avi");

三、循环显示视频的每一帧

while(1)

{

Mat frame;//定义Mat变量,用来存储每一帧

cap>>ffame; //读取视频的每一帧 (此为方法一)

//cap.read(frame);(此为读取视频每一帧的方法二)

imshow("视频显示",frame);//显示每一帧画面

waitKey(30);//控制显示速度在30ms,视频播放的帧率。(帧率即每秒播放的帧数,每秒播放的帧数越多,视频播放的速度越快)

}

三、异常读取

1)打开视频可以是本地视频也可以是网络视频

VideoCapture cap ("1.avi");//本地视频

VideoCapture cap ("https://www.123.com/");

2)读取视频一定要加异常判断

A:打开视频异常

if(!cap.isOpened())
{
     return;   //如果视频打开失败则直接返回,下面的所有代码均不执行
}

B:读取帧失败异常(一般都在读取帧结尾加)

注释:一般读取视频的时候,要读到结尾最后一帧后面,最后一帧后面为空,如果不加判断,则会出错。当读取不到视频帧后,代码会break,跳出if 循环,直接执行if后的代码;

cap>>frame;
if(!frame.empty())//如果读取的视频不为空,即可以读取到视频
{
    imshow("video",frame);
    waitKey(30);
    
}
    else  break;

四、获取视频的参数信息

获取参数信息官网:

OpenCV: Flags for video I/Oicon-default.png?t=M4ADhttps://docs.opencv.org/3.2.0/d4/d15/group__videoio__flags__base.html#gaeb8dd9c89c10a5c63c139bf7c4f5704d

	int width =cap.get(CAP_PROP_FRAME_WIDTH);//帧宽度
	int hight = cap.get(CAP_PROP_FRAME_HEIGHT);//帧高度
	int framerate = cap.get(CAP_PROP_FPS);//帧率
	int totalframe = cap.get(CAP_PROP_FRAME_COUNT);//总帧数

五、完整代码

#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>


using namespace cv;
using namespace std;

void main()
{
	VideoCapture cap("1.avi");
	if (!cap.isOpened())
		return;
//下面是获取视频的参数信息
	int width =cap.get(CAP_PROP_FRAME_WIDTH);//帧宽度
	int hight = cap.get(CAP_PROP_FRAME_HEIGHT);//帧高度
	int framerate = cap.get(CAP_PROP_FPS);//帧率
	int totalframe = cap.get(CAP_PROP_FRAME_COUNT);//总帧数
//输出视频参数信息
	cout << "帧宽度为:" << width << endl;
	cout << "帧高度为:" << hight << endl;
	cout << "帧率为:" << framerate << endl;
	cout << "总帧数为:" << totalframe << endl;
	
    Mat frame;
	
	while (1)
	{
		cap >> frame;
		if (frame.empty())
			break;
		imshow("视频", frame);
		waitKey(20);
	}
	cap.release();
	return;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值