C# Emgu.CV4.8.0读取rtsp流录制mp4可分段保存
【官方框架地址】
https://github.com/emgucv/emgucv
【算法介绍】
EMGU CV(Emgu Computer Vision)是一个开源的、基于.NET框架的计算机视觉库,它提供了对OpenCV(开源计算机视觉库)的封装。EMGU CV使得在.NET应用程序中实现计算机视觉功能变得更加容易,同时也支持C#和VB.NET等编程语言。
以下是对EMGU的详细介绍:
一、背景和历史
EMGU CV源于欧洲的一个研究项目,旨在为图像处理和计算机视觉应用提供一种易于使用的.NET接口。该项目最初是在德国慕尼黑工业大学开发的,后来被移至奥地利因斯布鲁克大学继续进行。自2008年以来,EMGU CV成为开源项目,并吸引了全球的开发者和研究人员的关注。
二、特点
- 跨平台性:EMGU CV可以在多种操作系统上运行,包括Windows、Linux和Mac OS X。这意味着开发人员可以编写一次代码,并在多个平台上运行。
- .NET集成:由于EMGU是基于.NET框架的,因此它可以轻松地与现有的.NET应用程序集成。开发人员可以利用现有的.NET库和工具,如Visual Studio和NuGet包管理器,来加速开发过程。
- OpenCV封装:EMGU CV封装了OpenCV库的功能,这意味着开发人员可以利用OpenCV的强大功能来实现各种图像处理和计算机视觉任务。
- 易用性:与原始的C++ OpenCV相比,EMGU CV提供了更易于使用的.NET接口。它提供了丰富的类和方法,简化了计算机视觉应用的开发过程。
- 社区支持:由于EMGU CV是开源的,因此有一个活跃的开发者社区提供支持和帮助。这意味着当遇到问题时,可以找到大量的在线资源和论坛来获取帮助。
- 不断更新和改进:随着计算机视觉技术的发展,EMGU CV也在不断更新和改进。通过定期发布新版本,库的功能得以增强,并支持最新的算法和技术。
- 与其他库的集成:除了对OpenCV的支持外,EMGU CV还可以与其他的图像处理和计算机视觉库集成,如OpenKinect、ARToolKitPlus等。这使得开发人员可以轻松地扩展其应用程序的功能。
三、应用领域
由于其强大的功能和易用性,EMGU CV被广泛应用于各种计算机视觉应用领域,包括但不限于:
- 人脸识别:利用EMGU CV实现人脸检测和识别,可用于安全、门禁系统等领域。
- 机器视觉:在生产线上的产品检测、定位和识别等任务中发挥关键作用。
- 图像处理:进行图像滤波、色彩转换、特征提取等操作。
- 运动跟踪:实时跟踪视频中的对象,如运动物体的跟踪和轨迹分析。
- 医学影像分析:在医学领域中处理和分析医学影像数据,如X光片、MRI图像等。
- 无人机和机器人视觉:为无人机和机器人提供视觉感知能力,使其能够自主导航和避障。
- 虚拟现实和增强现实:在虚拟现实和增强现实应用中实现场景理解和物体识别等功能。
- 实时视频流处理:在实时视频流中检测异常事件或进行实时分析。
四、结论
EMGU CV是一个强大而灵活的计算机视觉库,它为开发人员提供了一个易于使用的.NET接口来开发各种计算机视觉应用。由于其跨平台性、对OpenCV的封装以及活跃的社区支持,EMGU CV成为许多开发人员的首选工具之一。通过利用EMGU CV的功能,可以加速计算机视觉应用的开发过程并实现各种创新的应用场景。
【效果展示】

【实现部分代码】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Emgu.CV;
using FIRC;namespace RtspDemo
{public partial class Form1 : Form{RtspManager rm = new RtspManager();bool startRecordVideo = false;int totalSaveFrameCount = 0;VideoManager vm = null;int startIndex = 0;public Form1(){InitializeComponent();CheckForIllegalCrossThreadCalls = false;}private void btn_connect_Click(object sender, EventArgs e){if(btn_connect.Text=="连接"){if (string.IsNullOrEmpty(tb_rtsp.Text)){tssl_show.Text = "rtsp流地址错误!";return;}rm.Connect(tb_rtsp.Text);if (rm.Connected){tssl_show.Text = "连接成功";btn_connect.Text = "停止";rm.Start();}else{tssl_show.Text = "连接失败";}}else{rm.Stop();rm.DisConnect();btn_connect.Text = "连接";tssl_show.Text = "连接中断!";}}private void Form1_Load(object sender, EventArgs e){rm.GetImage += Rm_GetImage;rm.GetStatus += Rm_GetStatus;}private void Rm_GetStatus(string msg){if(msg=="disconnect"){btn_connect.Text = "连接";btn_video.Text = "开始录像";vm.Dispose();}}private void Rm_GetImage(Mat frame){if(startRecordVideo){startIndex++;if(startIndex>=totalSaveFrameCount){startIndex = 0;var saveFile = GetTimeString() + ".mp4";vm = new VideoManager(saveFile, rm.Fps, rm.Width, rm.Height);}vm.WriteFrame(frame);}pictureBox1.Image = frame.ToBitmap();}public string GetTimeString(){return DateTime.Now.ToString("yyyyMMdd-HHmmss_fff");}private void btn_pic_Click(object sender, EventArgs e){if(pictureBox1.Image!=null){var saveFile = GetTimeString() + ".jpg";pictureBox1.Image.Save(saveFile,ImageFormat.Jpeg);tssl_show.Text = "抓拍成功,保存为" + saveFile;}}private void btn_video_Click(object sender, EventArgs e){if(btn_video.Text=="开始录像"){if(btn_connect.Text=="连接"){tssl_show.Text = "请先连接RTSP流!";return;}btn_video.Text = "停止录像";btn_video.Update();Task.Run(() => {totalSaveFrameCount = Convert.ToInt32(tb_interval.Text) * rm.Fps;startIndex = 0;var saveFile = GetTimeString() + ".mp4";vm = new VideoManager(saveFile,rm.Fps,rm.Width,rm.Height);startRecordVideo = true;});}else{vm.Dispose();startRecordVideo = false;btn_video.Text ="开始录像";}}}
}
【视频演示】
https://www.bilibili.com/video/BV17N4y1q7cW/?vd_source=989ae2b903ea1b5acebbe2c4c4a635ee
【源码下载】
【测试环境】
测试环境:
vs2019
netframework4.7.2
Emgu4.8.0
相关文章:
C# Emgu.CV4.8.0读取rtsp流录制mp4可分段保存
【官方框架地址】 https://github.com/emgucv/emgucv 【算法介绍】 EMGU CV(Emgu Computer Vision)是一个开源的、基于.NET框架的计算机视觉库,它提供了对OpenCV(开源计算机视觉库)的封装。EMGU CV使得在.NET应用程序…...
java碳排放数据信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 java Web碳排放数据信息管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环 境为TOMCAT7.0,Myeclipse8.5开发,数据库为…...
K8S陈述式资源管理(1)
命令行: kubectl命令行工具 优点: 90%以上的场景都可以满足对资源的增,删,查比较方便,对改不是很友好 缺点:命令比较冗长,复杂,难记声明式 声明式:K8S当中的yaml文件来实现资源管理 GUI:图形…...
STL map容器与pair类模板(解决扫雷问题)
CSTL之Map容器 - 数据结构教程 - C语言网 (dotcpp.com)https://www.dotcpp.com/course/118CSTL之Pair类模板 - 数据结构教程 - C语言网 (dotcpp.com)https://www.dotcpp.com/course/119 刷到一个扫雷的题目,之前没有玩怎么过扫雷,于是我就去玩了玩…...
【React系列】Portals、Fragment
本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) Portals 某些情况下,我们希望渲染的内容独立于父组件,甚至是独立于当前挂载到的DOM元素中&am…...
ByteTrack算法流程的简单示例
ByteTrack ByteTrack算法是将t帧检测出来的检测框集合 D t {\mathcal{D}_{t}} Dt 和t-1帧预测轨迹集合 T ~ t − 1 {\tilde{T}_{t-1}} T~t−1 进行匹配关联得到t帧的轨迹集合 T t {T_{t}} Tt。 首先使用检测器检测t帧的图像得到检测框集合 D t {\mathcal{D}_{t}} …...
免费的GPT4来了,你还不知道吗?
程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…...
win10报错“zlib.dll文件丢失,软件无法启动”,修复方法,亲测有效
zlib.dll文件是一个由Zlib创建的动态链接库文件,它是用于Windows操作系统的数据压缩和解压缩的软件。Zlib是一个广泛使用的软件库,广泛应用在许多不同类型的软件中,包括游戏、浏览器和操作系统。 zlib.dll的主要作用是提供数据压缩和解压缩的…...
MFC中如何使用CListCtrl可以编辑,并添加鼠标右键及双击事件。
要在MFC中使用CListCtrl来实现编辑功能,可以按照以下步骤进行操作: 在对话框资源中添加CListCtrl控件,并设置合适的属性。在对话框类的头文件中添加成员变量来管理CListCtrl控件,例如: CListCtrl m_listCtrl; 3. 在O…...
[每周一更]-(第81期):PS抠图流程(扭扭曲曲的身份证修正)
应朋友之急,整理下思路,分享一下~~ 分两步走:先用磁性套索工具圈出要处理的图;然后使用透视剪裁工具,将扭曲的图片拉平即可;(macbook pro) 做事有规则,才能更高效;用什么工具,先列举…...
Kafka安全认证机制详解之SASL_PLAIN
一、概述 官方文档: https://kafka.apache.org/documentation/#security 在官方文档中,kafka有五种加密认证方式,分别如下: SSL:用于测试环境SASL/GSSAPI (Kerberos) :使用kerberos认证,密码是…...
2023南京理工大学通信工程818信号系统及数电考试大纲
注:(Δ)表示重点内容。具体内容详见博睿泽信息通信考研论坛 参考书目: [1] 钱玲,谷亚林,王海青. 信号与系统(第五版). 北京:电子工业出版社 [2] 郑君里,应…...
wsl(ubuntu)创建用户
我们打卡ubuntu窗口,如果没有创建用户,那么默认是root用户 用户的增删改查 查 查询所有的用户列表 cat /etc/passwd | cut -d: -f1cat /etc/passwd: 这个命令用于显示 /etc/passwd 文件的内容。/etc/passwd 文件包含了系统上所有用户的基本信息。每一…...
[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-8Lag Compensator滞后补偿器
本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-8Lag Compensator滞后补偿器 从稳态误差入手(steady state Error) 误差 Error : E ( s ) R ( s ) − X ( s ) R ( s ) − E ( s ) ⋅ K G …...
swift-碰到的问题
如何让工程不使用storyboard和scene 删除info.plist里面的Application Scene mainifest 删除SceneDelegate.swift 删除AppDelegate.swift里面的这两个方法 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession…...
安全与认证Week4
目录 目录 Web Security (TLS/SSL) 各层安全协议 Transport Layer Security (TLS)传输层安全性(TLS) SSL和TLS的联系与区别 TLS connection&session 连接与会话 题目2答案点 TLS ArchitectureTLS架构(5个协议) 题目1答案点 Handshake Proto…...
Golang高质量编程与性能调优实战
1.1 简介 高质量:编写的代码能否达到正确可靠、简洁清晰的目标 各种边界条件是否考虑完备异常情况处理,稳定性保证易读易维护编程原则 简单性 消除多余的重复性,以简单清晰的逻辑编写代码不理解的代码无法修复改进可读性 代码是写给人看的,并不是机器编写可维护代码的第一…...
vite 如何打包 dist 文件到 zip 使用插件 vite-plugin-zip-pack,vue3 ts
vite 如何打包 dist 文件到 zip 使用插件 vite-plugin-zip-pack,vue3 ts 开发过程中一个经常做的事就是将 ./dist 文件夹打包成 zip 分发。 每次手动打包还是很费劲的, vite 同样也有能把 ./dist 文件夹打包成 .zip 的插件,当然这个打包的文…...
jdbc源码研究
JDBC介绍 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 开发者不必为每家数据通信协议的不同而疲于奔命&#…...
挠性及刚挠结合印制电路技术
1.1挠性印制电路板概述 20世纪70年代末期,以日本厂商为主导,逐渐将挠性印制电路板(flexible printedcircuit board,FPCB,简称为FPC)广泛应用于计算机、照相机、打印机、汽车音响、硬盘驱动器等电子信息产品中。20世纪90年代初期&…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
