【学习OpenCV4】摄像头视频的读取与存储
1. 如何读取摄像头
在图像处理中,读取视频并进行处理是必不可少的操作,在OpenCV中,读取摄像头的视频所用到的主要函数为 capture()
。
①VideoCapture类的构造函数:1
2
3VideoCapture::VideoCapture()
VideoCapture::VideoCapture(const string& filename)
VideoCapture::VideoCapture(int device)
②读取摄像头视频的函数:1
2
VideoCapture& capture.read(Mat& image)
此函数用于捕获视频的每一帧,并返回刚刚捕获的帧如果没有视频帧被捕获,返回false。
读取摄像头视频的示例程序如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17void MyDemo::video_Demo(Mat& image) {
VideoCapture capture(0); //创建VideoCapture类
Mat frame; //定义Mat对象用于存储每一帧数据
while (true) {
capture.read(frame); //逐帧读取视频
flip(frame, frame, 1); //将读取的视频左右反转
if (frame.empty()) { //如果视频结束或未检测到摄像头则跳出循环
break;
}
imshow("Video", frame); //每次循环显示一帧图像
char k = waitKey(10); //两帧读取的间隔时间
if (k == 'q') { //按下q键退出循环
break;
}
}
capture.release(); //释放视频
}
2. 视频的存储
视频的存储所用到的是 VideoWriter
类。所使用到的类属性和方法如下
1 | bool open( |
其中fourcc编码格式可选参数如下:
| 参数 | 编码格式 |
| ——————————————- | —————————— |
| CV_FOURCC(‘P’,’I’,’M’,’1’) | MPEG-1 |
| CV_FOURCC(‘M’,’J’,’P’,’G’) | motion-jpeg |
| CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) | MPEG-4.2 |
| CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) | MPEG-4.3 |
| CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) | MPEG-4 |
| CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) | H263 |
| CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) | H263I |
| CV_FOURCC(‘F’, ‘L’, ‘V’, ‘1’) | FLV1 |
| -1 | 弹出一个编码器选择框 |
保存摄像头视频的程序:
1 | void MyDemo::video_Demo(Mat& image) { |