opencv VideoWriter保存摄像头视频、本地视频等
打开视频文件或摄像头视频需要使用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保存摄像头视频、本地视频等相关推荐
- 基于eclipse的android项目实战—博学谷(十九)播放不同视频(本地视频)
BoXueGu资源下载链接: https://download.csdn.net/download/hyh/19477319 BoXueGu图片资源下载(免费): https://yuyunyaohu ...
- 基于eclipse的android项目实战—博学谷(十八)播放不同视频(网络视频)
相信经过了这么长时间,小伙伴们应该都发现了博学谷这个项目存在问题,播放视频的时候,无论播放任何一个章节,他播放的视频都只是一个,也就是VideoPlayActivity.java里面写死的那个(myv ...
- 使用opencv调用摄像头然后录制视频和保存文件
用 OpenCV 开发经常用到摄像头,从 Camera获取图像后用OpenCV的算法进行处理,但是一般我们处理完图像之后,还需要将视频保存下来,比如保存成avi.mp4等格式.怎么保存呢?其实Open ...
- Opencv读取视频、打开摄像头、保存视频和视频倒放
原文出处:https://blog.csdn.net/yang_xian521/article/details/7440190 看了这个觉得说得很对,说白了Opencv主要针对是图像处理的计算机视觉库 ...
- OpenCV+python调用本地摄像头并录制视频
1.调用摄像头并录制视频 from cv2 import cv2 #捕获摄像头帧 cameraCapture = cv2.VideoCapture(0) fps = 30 size=(int(came ...
- opencv | A02 播放本地视频 调用摄像头
前言 VideoCapture:视频捕获相关类 代码实现 1.播放本地视频 #include <opencv2\opencv.hpp> #include <iostream>u ...
- Win10系统,用C++调用OpenCV接口,播放本地视频文件,播放本地和网络摄像头
1 前言 前边2篇文章介绍了在WIN10系统上,分别用C++和Python调用OpenCV接口,加载和显示一张静态图片.本篇我们来看一下,用C++如何调用OpenCV接口,打开和播放本地视频文件,打开 ...
- Python调用OpenCV接口播放本地视频文件、本地和网络摄像头
1 前言 上篇文章介绍了在WIN10系统上, C++调用OpenCV接口,播放本地视频文件.本地和网络摄像头视频.本篇我们来看一下,Python如何调用OpenCV接口,做同样的事情. 序号 视频来源 ...
- Qt+OpenCV读取摄像头视频、本地视频、网络视频流Demo
Qt+OpenCV读取摄像头视频.本地视频.网络视频流Demo
最新文章
- 集成服务入门(实验9)日志记录和邮件通知
- 三插头内部结构图_10寸三防加固平板电脑 条码数据采集器 工业级耐摔防爆 高清屏幕带网口串口 支持航空插头...
- python去重txt文本_Python 文件去重(转载)
- android通知栏半透明,Android开发实现透明通知栏
- 无线传感器网络--分簇或者不分簇
- python进行数据分析 kindle_利用Python进行数据分析
- ML之LiR:使用线性回归LiR回归模型在披萨数据集上拟合(train)、价格回归预测(test)
- 在Windows上使用putty连接一台Linux主机
- 【译】 Diving Into The Ethereum VM Part 6 - How Solidity Events Are Implemented
- 零基础的跨界自学拿到腾讯Offer的学习资料
- linux nginx 代理iis,nginx 系列 linux下安装以及配置IIS分发
- 启动Jupyter Notebook时出现Kernel error错误的解决方法
- android 按钮顶级效果_人人都可写代码-Android零基础编程-相对布局11
- docker容器连接Android设备,通过ADB连接到Docker容器中的USB Android设备
- 1-3 Sass 语法、编译、调试
- hadoop 爬虫_这些不用编程的爬虫工具,你一定要知道
- 用计算机写作文的好处,第7课 用计算机写作文教案
- 逃生2计算机房出不来,逃生2无法走路/按键无反应解决方法
- 腾讯云数据库开源再突破:TDSQL PG版查询性能提升百倍
- 斗地主的两种发牌方式
热门文章
- 【Android每周专题】触摸屏手势
- excel表格行宽列高怎么设置_解决方案:Excel自动调整列宽和行宽什么是快捷键? [Excel设置行高度自适应]...
- 微信长按网页保存为截图
- 【pytest】内置 fixtures 之 tmpdir:创建临时文件
- 无交互作用的正交设计
- 46个不得不知的生活小常识
- gitLab数据备份和恢复
- 一个或多个页边距被设置到可打印区域之外,是否继续?
- 关于原生js里报这个错:Cannot read properties of undefined (reading ‘classList‘) at HTMLLIElement.
- linux 模拟器安卓版下载,ONS模拟器下载