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(视频帧图像是否为彩色图像),这个参数要与图像对应,否则可能报错。

猜你喜欢

转载自www.cnblogs.com/silentteen/p/9122525.html