打开视频文件或摄像头视频需要使用Opencv中的VideoCapture类,保存视频或摄像头视频到本地磁盘,需要使用Opencv中的VideoWriter类。

VideoWriter类的一个常用构造方式如下:

VideoWriter(const string& filename, int fourcc, double fps,Size frameSize, bool isColor=true);

其中fourcc代表了所使用的编码方式,如果输入-1,则会在运行时候弹出选择对话框,可以选择编码器:

filename 输出视频文件名。
 fourcc为 四个字符用来表示压缩帧的codec 例如:
CV_FOURCC('P','I','M','1') = MPEG-1 codec
CV_FOURCC('M','J','P','G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec

若编码器代号为 -1,则运行时会弹出一个编码器选择框.

fps 被创建视频流的帧率。
frame_size 保存视频的宽和高。
isColor如果非零,编 码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。

备注:

生成文件占用空间最小的编码方式是MPEG-4.2 codec。在VideoWriter类的构造函数参数为CV_FOURCC('M', 'P', '4', '2') 。

最大的是MPEG-1 codec,对应在VideoWriter类的构造函数参数为CV_FOURCC('P','I','M','1') ,所占磁盘空间是前者的5.7倍。所以如果需要24小时全天候录制监控,可以优先使用MPEG-4.2的编解码方式。

例子:

录制摄像头视频到本地

#include <stdio.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace std;
using namespace cv;int main()
{VideoCapture cap(0);if (!cap.isOpened()){printf("open video failed!\n");return 1;}Mat Frame;//设置保存的视频帧数目int frameNum = 100;//保存视频的路径string outputVideoPath = "..\\test.avi";//获取当前摄像头的视频信息cv::Size sWH = cv::Size((int)cap.get(CV_CAP_PROP_FRAME_WIDTH),(int)cap.get(CV_CAP_PROP_FRAME_HEIGHT));VideoWriter outputVideo;outputVideo.open(outputVideoPath, CV_FOURCC('M', 'P', '4', '2'), 25.0, sWH);while (cap.isOpened() && frameNum > 0){cap >> Frame;if (Frame.empty()) break;outputVideo << Frame;frameNum--;imshow("img", Frame);waitKey(10);if (char(waitKey(1)) == 'q') break;}outputVideo.release();system("pause");
}

可能遇到的问题:

1.打不开视频或摄像头
①.本地视频的输入路径有问题,例如下面所示:
 string outputVideoPath = "C:\Users\Test\Testopencv\3.avi";

上述方式会因为转义符而出现问题。

正确的路径命名方式为:

string outputVideoPath = "C:\\Users\\Test\\Testopencv\\3.avi";
string outputVideoPath = "C:/Users/Test/Testopencv/3.avi";
②.摄像头前几帧出现空帧
解决办法:多次加载视频,cap>>Frame直至图像不为空
③.编码格式不对

在open函数中第二个参数是编码格式,一定按照提供的编码格式进行填写,在应用中最好的解决方法是为-1。

2.保存文件为空

可能是后缀名的问题,尝试使用.avi。

3.保存文件打不开

可能是帧率及图像宽高设置有误

参考:

1.https://www.cnblogs.com/polly333/p/5165290.html

欢迎指正,转载请注明出处https://blog.csdn.net/qq_42189368/article/details/80663174

opencv VideoWriter保存摄像头视频、本地视频等相关推荐

  1. 基于eclipse的android项目实战—博学谷(十九)播放不同视频(本地视频)

    BoXueGu资源下载链接: https://download.csdn.net/download/hyh/19477319 BoXueGu图片资源下载(免费): https://yuyunyaohu ...

  2. 基于eclipse的android项目实战—博学谷(十八)播放不同视频(网络视频)

    相信经过了这么长时间,小伙伴们应该都发现了博学谷这个项目存在问题,播放视频的时候,无论播放任何一个章节,他播放的视频都只是一个,也就是VideoPlayActivity.java里面写死的那个(myv ...

  3. 使用opencv调用摄像头然后录制视频和保存文件

    用 OpenCV 开发经常用到摄像头,从 Camera获取图像后用OpenCV的算法进行处理,但是一般我们处理完图像之后,还需要将视频保存下来,比如保存成avi.mp4等格式.怎么保存呢?其实Open ...

  4. Opencv读取视频、打开摄像头、保存视频和视频倒放

    原文出处:https://blog.csdn.net/yang_xian521/article/details/7440190 看了这个觉得说得很对,说白了Opencv主要针对是图像处理的计算机视觉库 ...

  5. OpenCV+python调用本地摄像头并录制视频

    1.调用摄像头并录制视频 from cv2 import cv2 #捕获摄像头帧 cameraCapture = cv2.VideoCapture(0) fps = 30 size=(int(came ...

  6. opencv | A02 播放本地视频 调用摄像头

    前言 VideoCapture:视频捕获相关类 代码实现 1.播放本地视频 #include <opencv2\opencv.hpp> #include <iostream>u ...

  7. Win10系统,用C++调用OpenCV接口,播放本地视频文件,播放本地和网络摄像头

    1 前言 前边2篇文章介绍了在WIN10系统上,分别用C++和Python调用OpenCV接口,加载和显示一张静态图片.本篇我们来看一下,用C++如何调用OpenCV接口,打开和播放本地视频文件,打开 ...

  8. Python调用OpenCV接口播放本地视频文件、本地和网络摄像头

    1 前言 上篇文章介绍了在WIN10系统上, C++调用OpenCV接口,播放本地视频文件.本地和网络摄像头视频.本篇我们来看一下,Python如何调用OpenCV接口,做同样的事情. 序号 视频来源 ...

  9. Qt+OpenCV读取摄像头视频、本地视频、网络视频流Demo

    Qt+OpenCV读取摄像头视频.本地视频.网络视频流Demo

最新文章

  1. 集成服务入门(实验9)日志记录和邮件通知
  2. 三插头内部结构图_10寸三防加固平板电脑 条码数据采集器 工业级耐摔防爆 高清屏幕带网口串口 支持航空插头...
  3. python去重txt文本_Python 文件去重(转载)
  4. android通知栏半透明,Android开发实现透明通知栏
  5. 无线传感器网络--分簇或者不分簇
  6. python进行数据分析 kindle_利用Python进行数据分析
  7. ML之LiR:使用线性回归LiR回归模型在披萨数据集上拟合(train)、价格回归预测(test)
  8. 在Windows上使用putty连接一台Linux主机
  9. 【译】 Diving Into The Ethereum VM Part 6 - How Solidity Events Are Implemented
  10. 零基础的跨界自学拿到腾讯Offer的学习资料
  11. linux nginx 代理iis,nginx 系列 linux下安装以及配置IIS分发
  12. 启动Jupyter Notebook时出现Kernel error错误的解决方法
  13. android 按钮顶级效果_人人都可写代码-Android零基础编程-相对布局11
  14. docker容器连接Android设备,通过ADB连接到Docker容器中的USB Android设备
  15. 1-3 Sass 语法、编译、调试
  16. hadoop 爬虫_这些不用编程的爬虫工具,你一定要知道
  17. 用计算机写作文的好处,第7课 用计算机写作文教案
  18. 逃生2计算机房出不来,逃生2无法走路/按键无反应解决方法
  19. 腾讯云数据库开源再突破:TDSQL PG版查询性能提升百倍
  20. 斗地主的两种发牌方式

热门文章

  1. 【Android每周专题】触摸屏手势
  2. excel表格行宽列高怎么设置_解决方案:Excel自动调整列宽和行宽什么是快捷键? [Excel设置行高度自适应]...
  3. 微信长按网页保存为截图
  4. 【pytest】内置 fixtures 之 tmpdir:创建临时文件
  5. 无交互作用的正交设计
  6. 46个不得不知的生活小常识
  7. gitLab数据备份和恢复
  8. 一个或多个页边距被设置到可打印区域之外,是否继续?
  9. 关于原生js里报这个错:Cannot read properties of undefined (reading ‘classList‘) at HTMLLIElement.
  10. linux 模拟器安卓版下载,ONS模拟器下载