opencv VideoWriter 保存的视频无法打开原因(详细注释)2020-09-05 11:47:38

( 1人已投票,[高质量] )
分享:
31.3K

//opencv 4.3 保存摄像头视频功能

VideoCapture cap;

   cap.open(0);//如果是个网络摄像头,需要IP地址及尾部参数,这个参数有方法可以直接获取,比如192.168.0.10/camera0,这个值是可以通过一个软件来获取的

   VideoWriter write;

   string outVideo = "Show_Example.avi";

   int fps = 24.0;//帧率double fps=cap.get(CV_CAP_PROP_FPS);//本地摄像头返回为会0,只有在打开视频文件的时候才能获取帧率;这地方不妨用一个随意值,顶多影响播放效果

   int height = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_HEIGHT));//读取视频的高度

   int width = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_WIDTH));//读取视频的宽度


//创建文件并设置相应参数,其中编码有五六种,如果设置为-1,会让用户手动选择,如果有特殊要求可以指定为需求值;最后的true带表采色图像,要与视频一致

   write.open(outVideo, CV_FOURCC('M', 'P', '4', '2'), fps, Size(width, height), true);

   qDebug("width/height: %d / %d", width, height);//在console的黑框中会输出对应宽高,注意宽高不能搞反

   while (1){

       Mat frame;

       cap >> frame;

       if (frame.empty())

       {

           cout << "Finish" << endl;

           break;

       }

       write.write(frame);//将每一帧写入文件

       imshow("Input video", frame);

       waitKey(30);//这是显示刷新间隔意思,如果是0,将不刷新,固定图像,这个函数与保存视频功能无关

       if (char(waitKey(1)) == 'q') break;//这个重要,只要记住如果不跳出,下面的release得不到执行,占用了文件也会造成文件无法打开

   }

   write.release();//这算个坑,如果保存的文件无法打开,要确定这一步被执行了,不要直接点Debug测试的停止,会造成文件破损无法打开,实测按q退出就可以了,否则,文件就打不开,也可以放到某个析构中确保执行

   cap.release();


//代码实测有效!






头像

snowcoal
  • opencv
  • 保存视频文件

本文标签:

opencv保存视频文件

收藏到我的私密空间

标题:opencv VideoWriter 保存的视频无法打开原因(详细注释)

作者:花花世界

你暂未登录,请登录后才可收藏至您的私密空间 确认取消
雪炭网

键盘操作 更便捷 -雪炭网雪中送炭-乐趣无限

如果本站的内容有幸帮助到了您,建议您了解一下当页的广告内容哦,我们的进步离不开您的支持,Thank you~