首页 > 编程语言 >C#+OpenCV进阶(三)_操作摄像头与视频文件

C#+OpenCV进阶(三)_操作摄像头与视频文件

时间:2024-07-11 11:41:45浏览次数:9  
标签:视频 进阶 C# mat static VideoCapture 视频文件 public videoCapture

1、VideoCapture的常用属性

#region 常用属性
//_ = videoCapture.CaptureType;  // 获取视频的捕获类型(文件或摄像头)
//_ = videoCapture.PosAviRatio;  // 获取或设置视频的相对位置(0开头1结尾)
//_ = videoCapture.FourCC;       // 获取或设置视频的编解码的4字符代码
//_ = videoCapture.Format;       // 获取或设置图像的对象格式
//_ = videoCapture.Format;       // 获取或设置后端特定的值(当前捕获模式)
//_ = videoCapture.ConvertRgb;   // 是否转化为Rgb图片

//_ = videoCapture.FrameWidth;   // 获取或设置视频的宽度
//_ = videoCapture.FrameHeight;  // 获取或设置视频的宽度

//_ = videoCapture.FrameCount;   // 获取或设置视频的帧数
//_ = videoCapture.Fps;          // 获取或设置视频的帧速率
//_ = videoCapture.PosMsec;      // 获取视频的当前帧位置
//_ = videoCapture.PosFrames;    // 获取或设置视频的下一帧位置

//_ = videoCapture.Brightness;  // 获取或设置图像的亮度(仅用于相机)
//_ = videoCapture.Contrast;    // 获取或设置图像的对比度(仅用于相机)
//_ = videoCapture.Saturation;  // 获取或设置图像的饱和度(仅用于相机)
//_ = videoCapture.Hue;         // 获取或设置图像的色调图像(仅用于相机)
//_ = videoCapture.Gain;        // 获取或设置图像的图像增益(仅用于相机)
//_ = videoCapture.Exposure;    // 获取或设置图像的曝光(仅用于相机) 
#endregion 常用属性

2、操作视频文件

/// <summary>
/// 打开视频 By 文件
/// </summary>
/// <param name="fileName">视频文件地址</param>
/// <param name="apiPreference">打开的方式类型</param>
/// <returns></returns>
public static VideoCapture Open_FromFile(string fileName, VideoCaptureAPIs apiPreference = VideoCaptureAPIs.ANY)
{
    // 写法一:
    //VideoCapture capture = new VideoCapture();
    //capture.Open(fileName, apiPreference);

    // 写法二:
    VideoCapture capture = new VideoCapture(fileName, apiPreference);

    return capture;
}

/// <summary>
/// 关闭视频/摄像头
/// </summary>
/// <param name="videoCapture"></param>
public static void Release(VideoCapture videoCapture) => videoCapture?.Release();

/// <summary>
/// 是否成功打开
/// </summary>
/// <param name="videoCapture">视频对象</param>
public static bool IsOpened(VideoCapture videoCapture) => videoCapture.IsOpened();


/// <summary>
/// 读取视频/摄像头中的当前帧 -RetrieveMat
/// </summary>
/// <param name="videoCapture">video对象</param>
public static Mat RetrieveMat(VideoCapture videoCapture)
{
    return videoCapture.RetrieveMat();
}

/// <summary>
/// 读取视频/摄像头中的当前帧 -Retrieve
/// </summary>
/// <param name="videoCapture">video对象</param>
/// <param name="mat">图像信息</param>
/// <param name="flag">它可以是帧索引或特定于驱动程序的标志</param>
/// <returns></returns>
public static bool Retrieve(VideoCapture videoCapture, out Mat mat, int flag = 0)
{
    mat = new Mat();
    return videoCapture.Retrieve(mat, flag);
}

/// <summary>
/// 读取视频/摄像头中的当前帧 -Read
/// </summary>
/// <param name="videoCapture">video对象</param>
/// <param name="mat">图像信息</param>
/// <returns></returns>
public static bool Read(VideoCapture videoCapture, out Mat mat)
{
    mat = new Mat();
    return videoCapture.Read(mat);
}

3、操作摄像头

/// <summary>
/// 打开视频 By 摄像头
/// </summary>
/// <param name="index">摄像头编号,0代表默认摄像头</param>
/// <param name="apiPreference">打开的方式类型</param>
/// <returns></returns>
public static VideoCapture Open_FromCamera(int index, VideoCaptureAPIs apiPreference = VideoCaptureAPIs.ANY)
{
    // 写法一:
    //VideoCapture capture = new VideoCapture();
    //capture.Open(index, apiPreference);

    // 写法二:
    VideoCapture capture = new VideoCapture(index, apiPreference);

    return capture;
}

/// <summary>
/// 关闭视频/摄像头
/// </summary>
/// <param name="videoCapture"></param>
public static void Release(VideoCapture videoCapture) => videoCapture?.Release();

/// <summary>
/// 是否成功打开
/// </summary>
/// <param name="videoCapture">视频对象</param>
public static bool IsOpened(VideoCapture videoCapture) => videoCapture.IsOpened();


/// <summary>
/// 读取视频/摄像头中的当前帧 -RetrieveMat
/// </summary>
/// <param name="videoCapture">video对象</param>
public static Mat RetrieveMat(VideoCapture videoCapture)
{
    return videoCapture.RetrieveMat();
}

/// <summary>
/// 读取视频/摄像头中的当前帧 -Retrieve
/// </summary>
/// <param name="videoCapture">video对象</param>
/// <param name="mat">图像信息</param>
/// <param name="flag">它可以是帧索引或特定于驱动程序的标志</param>
/// <returns></returns>
public static bool Retrieve(VideoCapture videoCapture, out Mat mat, int flag = 0)
{
    mat = new Mat();
    return videoCapture.Retrieve(mat, flag);
}

/// <summary>
/// 读取视频/摄像头中的当前帧 -Read
/// </summary>
/// <param name="videoCapture">video对象</param>
/// <param name="mat">图像信息</param>
/// <returns></returns>
public static bool Read(VideoCapture videoCapture, out Mat mat)
{
    mat = new Mat();
    return videoCapture.Read(mat);
}

4、保存录像

/// <summary>
/// 保存视频 -初始化
/// </summary>
/// <param name="fileName">视频名称</param>
/// <param name="apiPreference">允许指定要使用的API后端。可用于强制执行特定读取器</param>
/// <param name="fourcc">用于压缩帧的编解码器的4个字符代码;默认是PIM1,也可以是MJPG、H264、H265</param>
/// <param name="fps">视频流的帧速率</param>
/// <param name="frameSize">视频流的宽高</param>
/// <param name="isColor">是否是彩色</param>
/// <returns></returns>
public static VideoWriter VideoWriter_Init(string fileName, VideoCaptureAPIs apiPreference, FourCC fourcc, double fps, Size frameSize, bool isColor = true)
{
    VideoWriter videoWriter = new VideoWriter(fileName, apiPreference, fourcc, fps, frameSize, isColor);
    return videoWriter;
}

/// <summary>
/// 保存视频 - 添加帧
/// </summary>
/// <param name="videoCapture">VideoWriter对象</param>
/// <param name="mat">图像信息</param>
/// <returns></returns>
public static void VideoWriter_Write(VideoWriter videoWriter, Mat mat) => videoWriter.Write(mat);

/// <summary>
/// 保存视频 - 保存完成(结尾执行或分段执行)
/// </summary>
/// <param name="videoCapture">VideoWriter对象</param>
/// <param name="mat">图像信息</param>
/// <returns></returns>
public static void VideoWriter_Release(VideoWriter videoWriter) => videoWriter?.Release();

标签:视频,进阶,C#,mat,static,VideoCapture,视频文件,public,videoCapture
From: https://www.cnblogs.com/qq2806933146xiaobai/p/18295792

相关文章

  • 使用夜莺和 Categraf 快速建设 MySQL 监控
    之前翻译过一篇文章,介绍 MySQL监控的一些原理,本文侧重实操,使用夜莺v7.beta12.1版本为大家做一个演示,采集器使用Categraf,先看一下最终仪表盘效果:下面开工。1.安装夜莺和Categraf夜莺的安装可以参考 夜莺官方文档,Categraf的安装可以参考 Categraf官方文档。这里就不赘......
  • 界面组件Kendo UI for React 2024 Q2亮点 - 生成式AI集成、设计系统增强
    随着最新的2024年第二季度发布,KendoUIforReact为应用程序开发设定了标准,包括生成式AI集成、增强的设计系统功能和可访问的数据可视化。新的2024年第二季度版本为应用程序界面提供了人工智能(AI)提示,从设计到代码的生产力增强、可访问性改进、一系列新的UI组件等。KendoUI致力......
  • Mock server自启动
    使用Flask-testing客户端,实现mock server自启动1.创建mock_server#mock_server.pyfromflaskimportFlask,jsonifyapp=Flask(__name__)@app.route('/api/user',methods=['GET'])defmock_user():returnjsonify({'id':1,'name&#......
  • HumanoidBench——模拟仿人机器人算法有未来
    概述论文地址:https://arxiv.org/pdf/2403.10506仿人机器人具有类似人类的外形,有望在各种环境和任务中为人类提供支持。然而,昂贵且易碎的硬件是这项研究面临的挑战。因此,本研究开发了使用先进模拟技术的HumanoidBench。该基准利用仿人机器人评估不同算法的性能,其中包括各......
  • SuperSocket 客户端
    通过NuGet来安装SuperSocket客户端,SuperSocket.ClientEngine实现代码如下:publicpartialclassMainPage:Page{SuperSocket.ClientEngine.AsyncTcpSessionclient=null;publicMainPage(){InitializeComponent();DataContext=ViewMode......
  • C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,
    目录C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】一维数组一维数组的创建数组的七种初始化完全初始化:部分初始化:字符数组的初始化:自动初始化为0:使用`memset`函数初始化:循环初始化:指定初始化器(`c99`,`gcc`)支持:一维数组的使用案例1:统计随机数的分布......
  • Memcached介绍和详解
    Memcached介绍和详解Memcached是一个高性能的分布式内存对象缓存系统,通过在内存中缓存数据来减少数据库的读取次数,从而提高动态Web应用程序的速度和效率。下面将详细介绍Memcached的安装、配置和使用方法。Memcached简介Memcached是一个基于内存的缓存系统,它通常用于缓......
  • 首席数据官CDO证书报考指南:方式、流程、适考人群与考试难度
    在信息泛滥的今天,数据已转变为企业不可或缺的宝贵资源。面对海量的信息,如何提炼出价值,为企业带来实质性的收益?首席数据官(CDO)认证的出现正是为了满足这一需求,它不仅是个人专业能力的体现,也是引领企业迈向数据化未来的关键。首席数据官的角色和重要性作为企业中的核心人物,首席......
  • 论文分享|KDD2024‘北航|平等对待每种语言:CCRK—1对K对比学习一致提升跨语言跨模态检
    推荐一篇笔者参与的KDD2024工作,面向多语言场景下的图文检索的CCRK。核心创新点可以用下图总结:我们提出了一种新颖的1对K对比学习损失,同时解决了CCR任务中模态内错误传播和模态间优化偏差问题,在训练中平等对待各种语言。我们改进了现有的预训练中M-ITM和M-MLM任务的难负例采......
  • Office mac苹果及windows版安装包百度云盘分享下载
    不管是工作党,还是学生,或多或少,都有用到办公软件。诸如Word、Excel、PowerPoint等常用的办公组件,不仅能给我们的工作带来便利性,还能大大提高我们的工作效率。在诸多办公软件中,MicrosoftOffice又是使用最多最广的一款。相对来说,office的兼容性是比较好的。不仅支持WindowsXP,还......