视频读写

1.从文件中读取视频:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3 
 4 using namespace cv;
 5 using namespace std;
 6 
 7 int main(int argc, char** argv) {
 8     VideoCapture capture;    //一个视频读取函数capture
 9     capture.open("L:/opencv_picture/video_004.avi"); // capture.open读取视频文件位置
10     if (!capture.isOpened()) {
11         printf("could not load video data...
");  //如果读不到视频
12         return -1;
13     }
14 
15     Mat frame;         //一帧图像frame
16     namedWindow("video-demo", CV_WINDOW_AUTOSIZE);
17     while (capture.read(frame)) {     //capture.read读取视频后将每一帧图像放在frame中
18         imshow("video-demo", frame);  //显示每一帧图像
19         char c = waitKey(50);        //每帧延时0.05秒
20         if (c == 27) {                //如果按下Esc键
21             break;
22         }
23     }
24 
25     waitKey(0);
26     return 0;
27 }

每帧延时0.05s刚好1s显示20帧图像,为动画效果。

2.从摄像头中读取视频:

 opencv中视频编码器的选用API参数如上图所示:

 mp4:

 读取(摄像头录制)视频代码如下:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3 
 4 using namespace cv;
 5 using namespace std;
 6 
 7 int main(int argc, char** argv) {
 8     VideoCapture capture(0);
 9     if (!capture.isOpened()) {
10         printf("could not load video data...
");
11         return -1;
12     }
13 
14     double fps = capture.get(CV_CAP_PROP_FPS);  // 获取视频帧fps
15     Size size = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT));
16     //获取帧图像的宽度和高度 size( , )
17     printf("FPS : %f", fps);
18     VideoWriter writer("H:/wv_demo.mp4", -1, 15.0, size, true);
19     //将摄像头采集的视频写到一个mp4的文件中
20     //VideoWriter writer 函数的参数:
21     //1.文件位置名称格式  2.编码器(为-1时可以选择编码方式)3.录制帧数 4.录制视频的size 5.true
22 
23 
24     // create window
25     Mat frame;
26     namedWindow("video-demo", CV_WINDOW_AUTOSIZE);
27 
28     // show each frame and save
29     while (capture.read(frame)) {
30         imshow("video-demo", frame);
31         writer.write(frame);
32         char c = waitKey(50);
33         if (c == 27) {
34             break;
35         }
36     }
37 
38     waitKey(0);
39     return 0;
40 }

注意:

若编码器选择为-1时,

录制的文件为avi,则会出现选择框选择编码的方式。

录制的文件为mp4,则都是默认选项直接录制。

结束录制时需要按两次Esc键。

原文地址:https://www.cnblogs.com/Jack-Elvis/p/12046108.html