opencv进行视频拍摄

Posted silentteen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(视频帧图像是否为彩色图像),这个参数要与图像对应,否则可能报错。





以上是关于opencv进行视频拍摄的主要内容,如果未能解决你的问题,请参考以下文章

[OpenCV实战]6 基于特征点匹配的视频稳像

基于opencv对高空拍摄视频消抖处理

OpenCV-PyQT项目实战(11)项目案例07:摄像头操作与拍摄视频

OpenCV-PyQT项目实战(11)项目案例07:摄像头操作与拍摄视频

视频合并软件把多个视频合并为一个视频使用方法

如何更改此 C++ (OpenCV) 代码以获取图像而不是视频?