当前位置: 首页 > news >正文

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成为开源项目,并吸引了全球的开发者和研究人员的关注。

二、特点

  1. 跨平台性:EMGU CV可以在多种操作系统上运行,包括Windows、Linux和Mac OS X。这意味着开发人员可以编写一次代码,并在多个平台上运行。
  2. .NET集成:由于EMGU是基于.NET框架的,因此它可以轻松地与现有的.NET应用程序集成。开发人员可以利用现有的.NET库和工具,如Visual Studio和NuGet包管理器,来加速开发过程。
  3. OpenCV封装:EMGU CV封装了OpenCV库的功能,这意味着开发人员可以利用OpenCV的强大功能来实现各种图像处理和计算机视觉任务。
  4. 易用性:与原始的C++ OpenCV相比,EMGU CV提供了更易于使用的.NET接口。它提供了丰富的类和方法,简化了计算机视觉应用的开发过程。
  5. 社区支持:由于EMGU CV是开源的,因此有一个活跃的开发者社区提供支持和帮助。这意味着当遇到问题时,可以找到大量的在线资源和论坛来获取帮助。
  6. 不断更新和改进:随着计算机视觉技术的发展,EMGU CV也在不断更新和改进。通过定期发布新版本,库的功能得以增强,并支持最新的算法和技术。
  7. 与其他库的集成:除了对OpenCV的支持外,EMGU CV还可以与其他的图像处理和计算机视觉库集成,如OpenKinect、ARToolKitPlus等。这使得开发人员可以轻松地扩展其应用程序的功能。

三、应用领域

由于其强大的功能和易用性,EMGU CV被广泛应用于各种计算机视觉应用领域,包括但不限于:

  1. 人脸识别:利用EMGU CV实现人脸检测和识别,可用于安全、门禁系统等领域。
  2. 机器视觉:在生产线上的产品检测、定位和识别等任务中发挥关键作用。
  3. 图像处理:进行图像滤波、色彩转换、特征提取等操作。
  4. 运动跟踪:实时跟踪视频中的对象,如运动物体的跟踪和轨迹分析。
  5. 医学影像分析:在医学领域中处理和分析医学影像数据,如X光片、MRI图像等。
  6. 无人机和机器人视觉:为无人机和机器人提供视觉感知能力,使其能够自主导航和避障。
  7. 虚拟现实和增强现实:在虚拟现实和增强现实应用中实现场景理解和物体识别等功能。
  8. 实时视频流处理:在实时视频流中检测异常事件或进行实时分析。

四、结论

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

http://www.lryc.cn/news/274478.html

相关文章:

  • java碳排放数据信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • K8S陈述式资源管理(1)
  • STL map容器与pair类模板(解决扫雷问题)
  • 【React系列】Portals、Fragment
  • ByteTrack算法流程的简单示例
  • 免费的GPT4来了,你还不知道吗?
  • win10报错“zlib.dll文件丢失,软件无法启动”,修复方法,亲测有效
  • MFC中如何使用CListCtrl可以编辑,并添加鼠标右键及双击事件。
  • [每周一更]-(第81期):PS抠图流程(扭扭曲曲的身份证修正)
  • Kafka安全认证机制详解之SASL_PLAIN
  • 2023南京理工大学通信工程818信号系统及数电考试大纲
  • wsl(ubuntu)创建用户
  • [足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-8Lag Compensator滞后补偿器
  • swift-碰到的问题
  • 安全与认证Week4
  • Golang高质量编程与性能调优实战
  • vite 如何打包 dist 文件到 zip 使用插件 vite-plugin-zip-pack,vue3 ts
  • jdbc源码研究
  • 挠性及刚挠结合印制电路技术
  • Python+OpenGL绘制3D模型(七)制作3dsmax导出插件
  • MediaPipeUnityPlugin Win10环境搭建(22年3月的记录,新版本已完全不同,这里只做记录)
  • Nginx - location块中的alias和try_files重定向
  • 二刷Laravel 教程(用户模型)总结Ⅲ
  • 安装PyTorch及环境配置(应用于Python上的YOLO)
  • 【194】PostgreSQL 14.5 编写SQL从身份证号中查找性别,并且更新性别字段。
  • 微服务管家:NestJS 如何使用服务发现 Consul 实现高效的微服务节点管理
  • Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C++)
  • 铁塔基站数字化管理监测解决方案
  • 如何使用Python3 Boto3删除AWS CloudFormation的栈(Stacks)
  • 差分约束算法