C# Emgu.CV4.8.0读取rtsp流分段保存

【官方框架地址】

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
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/328228.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python武器库开发-武器库篇之敏感路径扫描器开发(四十二)

Python武器库开发-武器库篇之敏感路径扫描器开发(四十二) 我们在信息收集的过程中,会发现部署的目标网站之后会有很多的敏感文件,比如说配置文件(.cfg)、数据文件(.sql)、目录文件(/backup /conf /admin)。这些配置的…

Hello 2024

Hello 2024 A. Wallet Exchange 题意:Alice和Bob各有a和b枚硬币,每次他们可以选择交换硬币或者保留,然后扣除当前一枚手中的硬币,当一方没得扣另一方就赢了。 思路:Alice先手,所以当硬币和为奇数时Alice…

基于Python+Django,开发一款房屋租赁系统

学习文档 学习过程中,遇到问题可以咨询作者 功能介绍 平台采用B/S结构,后端采用主流的PythonDjango进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、房屋详情页、用户中心模块。…

手机上下载 Linux 系统

我们首先要下载 Ternux 点击下载以及vnc viewer (提取码:d9sX),需要魔法才行 下载完以后我们打开 Ternux 敲第一个命令 pkg upgrade 这个命令是用来跟新软件的 敲完命令就直接回车,如果遇到需要输入 Y/N 的地方全部输入 Y 下一步 #启动TMOE…

纳尼??Rabbitmq居然被一个逗号给坑了??

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 前言 这个问题发生在部署一套新的环境。搭建一个单节点的Rabbitmq,按照小伙伴写的部署文档搭建的。其中搭建步骤和我…

windows下载官方正版notepad++

一、前言 notepad是一款非常好用的编辑器,简洁、快速、高效。可是很多时候我们想去官网下载时,百度出来的都是一堆第三方下载地址,捆绑流氓软件,要么就是付费,作为一款优秀开源软件,我们必须要知道正确的下…

java数据结构与算法刷题-----LeetCode64. 最小路径和

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只…

SpringDoc注解解析

一、什么是SpringDoc SpringDoc注解的使用,它是基于OpenAPI 3和Swagger 3的现代化解决方案,相较于旧版的Swagger2(SpringFox),SpringDoc提供了更简洁、更直观的注解方式。 二、SpringDoc的注解分类 2.1 作用于类的注解 1. Tag 用于说明…

【无标题】MySQL8修改非root用户密码

首先查看修改的用户信息,我这里用户名是demo,host是**%** 然后使用alter命令修改密码 这里USER后的参数是第一步里查询得到的user与host的组合。ALTER USER demo% IDENTIFIED WITH mysql_native_password BY 新密码;可能会出现的错误: 如果百…

用js随机添加字母

样式 <style>.itp {width: 200px;height: 60px;border: 5px solid red;text-align: center;line-height: 60px;font-size: 30px;margin: 10px;}button {width: 80px;height: 30px;color: rgb(229, 225, 232);border-radius: 4px;font-size: 20px;outline: none;border: …

Linux系统性能优化:七个实战经验

Linux系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题&#xff0c;例如在Linux上搭建了一个web服务&#xff0c;经常出现网页无法打开、打开速度慢等现象&#xff0c;而遇到这些问题&#xff0c;就有人…

字节跳动基础架构SRE-Copilot获得2023 CCF国际AIOps挑战赛冠军

近日&#xff0c;2023 CCF国际AIOps挑战赛决赛暨“大模型时代的AIOps”研讨会在北京成功举办&#xff0c;活动吸引了来自互联网、运营商、科研院所、高校、软硬件厂商等领域多名专家学者参与&#xff0c;为智能运维的前沿学术研究、落地生产实践打开了新思路。决赛中&#xff0…