• 视频读写


    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键。

  • 相关阅读:
    OpenCV——IplImage
    OpenCV——常用函数查询
    OpenCV——Sobel和拉普拉斯变换
    OpenCV——CvSeq动态结构序列
    OpenCV——人脸检测
    Java—Integer类
    Java—NumberFormat与DecimalFormat类
    sql事务机制
    存储过程
    java中的抽象类和接口
  • 原文地址:https://www.cnblogs.com/Jack-Elvis/p/12046108.html
Copyright © 2020-2023  润新知