热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

opencv之VideoCapture与VideoWriter笔记

opencv版本:opencv3.4.11.VideoCapture类作用:捕获视频文件,图像序列或摄像头;classVideoCapture{public:构造VideoC

opencv版本:opencv3.4.1 


1. VideoCapture类 

 作用: 捕获视频文件,图像序列或摄像头;

class VideoCapture
{
public://构造VideoCapture();VideoCapture(const String& filename);//apiPreference参数取值:cv::CAP_FFMPEG or cv::CAP_IMAGES or cv::CAP_DSHOW等VideoCapture(const String& filename, int apiPreference);VideoCapture(int index);//析构virtual ~VideoCapture();//打开视频文件或捕获设备或IP视频流以进行视频捕获virtual bool open(const String& filename);//打开摄像机进行视频捕获virtual bool open(int index);bool open(int cameraNum, int apiPreference);virtual bool open(const String& filename, int apiPreference);//若视频捕获已经被初始化(打开),返回true;virtual bool isOpened() const;//关闭视频文件或捕获设备。virtual void release();//从视频文件或捕获设备中捕获下一帧。virtual bool grab();/*解码并返回抓取的视频帧。image为捕获返回的视频帧,没有帧被捕获image为空;成功不会返回true;*/virtual bool retrieve(OutputArray image, int flag = 0);//抓取、解码并返回下一个视频帧。virtual bool read(OutputArray image);//设置VideoCapture中的属性。virtual bool set(int propId, double value);//返回指定的VideoCapture属性virtual double get(int propId) const;...
};

测试代码:

int main()
{VideoCapture capture;capture.open("./video/xxx.AVI");if(!capture.isOpened()){std::cout <<"failed to open video!" < frameImg ;if(!frameImg.empty()){imwrite("./video/inc835.jpg", frameImg);break;}}capture.release();return 0;
}

 2. VideoWriter类

 作用: 写视频文件或图像序列;

class VideoWriter
{
public://构造VideoWriter();/*filename:输出视频文件的文件名 fourcc:用于压缩帧的编解码器的4个字符代码。fps:帧率frameSize:帧宽高大小;isColor:非0,编码器将期望并编码彩色帧;否则,灰度帧;*/VideoWriter(const String& filename, int fourcc, double fps,Size frameSize, bool isColor &#61; true);//apiPreference参数: cv::CAP_FFMPEG or cv::CAP_GSTREAMER等VideoWriter(const String& filename, int apiPreference, int fourcc, double fps,Size frameSize, bool isColor &#61; true);//析构virtual ~VideoWriter();//打开文件virtual bool open(const String& filename, int fourcc, double fps,Size frameSize, bool isColor &#61; true);bool open(const String& filename, int apiPreference, int fourcc, double fps,Size frameSize, bool isColor &#61; true);//若视频输出已经被成功初始化(打开),返回true;virtual bool isOpened() const;//关闭视频输出virtual void release();//写下一帧virtual void write(const Mat& image);virtual bool set(int propId, double value);virtual double get(int propId) const;//将4个字符连接到一个fourcc代码static int fourcc(char c1, char c2, char c3, char c4);protected:Ptr writer;Ptr iwriter;static Ptr create(const String& filename, int fourcc, double fps,Size frameSize, bool isColor &#61; true);
};

测试代码:

int main()
{VideoCapture inputVideo("./video/INC835.AVI");if(!inputVideo.isOpened()){std::cout <<"----VideoCapture open failed----" < rgb;cv::Mat resultImg;while(1){inputVideo >> frameImg;if(!frameImg.empty()){cv::split(frameImg, rgb); //分离出三通道rgb;for(int i &#61;0; i <3; i&#43;&#43;){#if 1if(i !&#61; 0){//提取B通道分量rgb[i] &#61; cv::Mat::zeros(Size(imageW,imageH), rgb[0].type());}#endif//通道合并cv::merge(rgb, resultImg);}outputVideo <}

 

outputVideo.open(fileName, -1,25.0,Size(imageW,imageH),false);

错误: 调用outputVideo.open出现OpenCV: FFMPEG: tag 0xffffffff/&#39;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#39; is not found (format &#39;avi / AVI (Audio Video Interleaved)&#39;)&#39;

处理: 将参数2改为使用fourcc生成;具体字段需要根据编码确定;

如: outputVideo.open(fileName, VideoWriter::fourcc(&#39;M&#39;,&#39;J&#39;,&#39;P&#39;,&#39;G&#39;),25.0,Size(imageW,imageH),false);

或fourcc(&#39;F&#39;,&#39;M&#39;,&#39;P&#39;,&#39;4&#39;)&#xff1b;

参考: python错误&#xff1a;OpenCV: FFMPEG: tag 0xffffffff/’&#xfffd;&#xfffd;&#xfffd;&#xfffd;‘’is not found (format ’mp4 / MP4 (MPEG-4 Part 14)’)’-python黑洞网


推荐阅读
  • 我在尝试将组合框转换为具有自动完成功能时遇到了一个问题,即页面上的列表框也被转换成了自动完成下拉框,而不是保持原有的多选列表框形式。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • Exploring issues and solutions when defining multiple Faust agents programmatically. ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • 本文总结了在多人协作开发环境中使用 Git 时常见的问题及其解决方案,包括错误合并分支的处理、使用 SourceTree 查找问题提交、Git 自动生成的提交信息解释、删除远程仓库文件夹而不删除本地文件的方法、合并冲突时的注意事项以及如何将多个提交合并为一个。 ... [详细]
  • Unity技巧:实现背景音乐的开关功能
    本文详细介绍了如何在Unity中通过脚本控制背景音乐的开启与关闭,适合初学者参考。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 本文详细探讨了编程中的命名空间与作用域概念,包括其定义、类型以及在不同上下文中的应用。 ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 在AngularJS中,有时需要在表单内包含某些控件,但又不希望这些控件导致表单变为脏状态。例如,当用户对表单进行修改后,表单的$dirty属性将变为true,触发保存对话框。然而,对于一些导航或辅助功能控件,我们可能并不希望它们触发这种行为。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • 本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ... [详细]
author-avatar
手机用户2502921293
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有