• opencv进行视频拍摄


    opencv进行视频拍摄

    主要类:VideoCapture与VideoWriter

    代码:

    double rate = 30.0;
    Size videoSize(1280, 960);
    VideoCapture capture(0);                                                                //(1)
    capture.set(CAP_PROP_POS_AVI_RATIO, rate);                  //设置帧率 
    capture.set(CAP_PROP_FRAME_WIDTH, videoSize.width);         //设置尺寸大小
    capture.set(CAP_PROP_FRAME_HEIGHT, videoSize.height);
    
    //VideoWriter writer("out.avi", CV_FOURCC('M', 'J', 'P', 'G'), rate, videoSize, false); //(2)
    VideoWriter writer("out.avi", -1 , rate, videoSize, false);                             //(3)
    
    Mat frame;
    
    int frame_num = 0;
    while (capture.isOpened() && frame_num <300 )
    {
    	++frame_num;
    	capture >> frame;
    
    	cv::cvtColor(frame, frame, CV_BGR2GRAY);
    	
    	writer << frame;   
    	cv::imshow("video", frame);
    
    	if (cv::waitKey(1000/rate) > 0)
    		break;
    }
    
    //关闭视频,手动调用析构函数
    capture.release();
    writer.release();                                                                       //(4)
    

    注意:

      (1) 该段程序为利用摄像机进行拍摄的代码,如果读取现有视频,则将语句(1)进行修改,将参数0改为路径名,如

    VideoCapture capture("Demo.avi");
    

      (2) 经常有拍摄完视频无法播放的情况,问题主要有以下两种情况:
        a)用语句(2)设置VideoWriter时,第二个参数CV_FOURCC设置的是编码格式,而电脑上可能并没有所选的编码格式,从而引起输出视频无法读取;
        解决方法:将语句(2)改为语句(3),语句(3)会自动弹出如下图所示的对话框,可以在其中选择编码格式(这些是电脑上有的编码格式);
        

        b)缺少语句(4)或者由于某些原因没有执行语句(4),同样会导致输出的视频无法读取;
      (3) 语句(3)中最后一个参数为bool isColor(视频帧图像是否为彩色图像),这个参数要与图像对应,否则可能报错。

  • 相关阅读:
    sed处理文本文件
    多节点ssh免密匙登录
    nmon监控工具的使用
    PostgreSQL 磁盘使用大小监控
    PostgreSQL 锁监控
    PostgreSQL installations
    《卸甲笔记》-多表查询之二
    《卸甲笔记》-多表查询之一
    《卸甲笔记》-子查询
    《卸甲笔记》-分组统计查询
  • 原文地址:https://www.cnblogs.com/silentteen/p/9122525.html
Copyright © 2020-2023  润新知