发布时间:2022-10-16 22:00
一、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/Ohttps://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
#include
#include
#include
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;
}