0. 写在前面
此篇博文主要记录使用Opencv4系列对视频的读取功能。
1. 视频的读取
cv::VideoCapture类是读取视频的,cv::VideoCapture既支持视频问价的读取,也支持从视频捕获的文件中读取视频数据,像笔记本的自带摄像头,外接USB的摄像头等。
创建对象的方式有三种:
cpp
//1. 从输入的文件名对应的文件中读取
cv::VideoCapture capture(const string& fileName);
//2. 从视频捕捉设备ID中读取
cv::VideoCapture capture(int device);
//3. 调用无参构造函数创建对象
cv::VideoCapture capture();
创建完VideoCapture类之后,还需要将视频中的图像取出来,读取到cv::Mat矩阵中,共有两种方式,一种是read,一种是>>操作。
cpp
cv::VideoCapture cap;
cap.open("xxx/xxx/xxx.mp4");
//1. read 方式
Mat frame;
cap.read(frame);
//2. >> 方式
cap >> frame;
//获取 视频中的某些属性
retval = cap.get(gropId);
//gropId代表的数字属性:
1:cv2::CAP_PROP_POS_FRAMES 从0开始索引帧,帧位置
2: cv2::CAP_PROP_POS_AVI_RATIO 视频文件的相对位置(0表示开始,1表示结束)
3: cv2::CAP_PROP_FRAME_WIDTH 视频流的帧宽度
4: cv2::CAP_PROP_FRAME_HEIGHT 视频流的帧高度
5: cv2::CAP_PROP_FPS 帧率
6: cv2::CAP_PROP_FOURCC 编解码器四字符代码
7: cv2::CAP_PROP_FRAME_COUNT 视频文件的帧
Mat img;
int num = cap.get(cv2::CAP_PROP_FRAME_COUNT);
for(int 0 = 0;i < num - 1;i++)
{
cap.read(img);
//do something
//...
}
cap.release();