【官方框架地址】
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被广泛应用于各种计算机视觉应用领域,包括但不限于:
四、结论
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