C# 通过Emgu CV播放流媒体(RTSP)

      Emgu CV is a cross platform .Net wrapper to the OpenCV image processing library. Allowing OpenCV functions to be called from .NET compatible languages such as C#, VB, VC++, IronPython etc. The wrapper can be compiled by Visual Studio, Xamarin Studio and Unity, it can run on Windows, Linux, Mac OS X, iOS, Android and Windows Phone.

  Emgu CV 下载地址:http://www.emgu.com/wiki/index.php/Main_Page,需要下载3.0版本以后的,Emgu CV 3.0继成了ffmpeg

  

Capture _capture = new Capture(fileName); //rtsp://user:[email protected]:554/
_capture.ImageGrabbed += capture_ImageGrabbed;
_capture.Start();

private void capture_ImageGrabbed(object sender, EventArgs e)
{
  try
  {
    Mat frame = new Mat();

    lock (lockObj)
    {
      if (capture != null)
      {
        if (!capture.Retrieve(frame))
        {
          frame.Dispose();
          return;
        }
        if (frame.IsEmpty)
          return;

        //显示图片 可以使用Emgu CV 提供的 ImageBox显示视频, 也可以转成 BitmapSource显示。

        //略

      }
    }
  }
  catch (Exception ex)
  {
  }
}

 
public static class BitmapSourceConvert
    {
        /// <summary>
        /// Delete a GDI object
        /// </summary>
        /// <param name="o">The poniter to the GDI object to be deleted</param>
        /// <returns></returns>
        [DllImport("gdi32")]
        private static extern int DeleteObject(IntPtr o);

        /// <summary>
        /// Convert an IImage to a WPF BitmapSource. The result can be used in the Set Property of Image.Source
        /// </summary>
        /// <param name="image">The Emgu CV Image</param>
        /// <returns>The equivalent BitmapSource</returns>
        public static BitmapSource ToBitmapSource(IImage image)
        {
            using (System.Drawing.Bitmap source = image.Bitmap)
            {
                IntPtr ptr = source.GetHbitmap(); //obtain the Hbitmap

                BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                    ptr,
                    IntPtr.Zero,
                    Int32Rect.Empty,
                    System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

                DeleteObject(ptr); //release the HBitmap
                return bs;
            }
        }
    }

 注意事项:由于ffmpeg 默认使用TCP同步连接请求视频源,连接超时时间很长,

Capture _capture = new Capture(fileName),如果访问的媒体不存在,会导致阻塞。需要设置ffmpeg连接方式或者超时时间。

设置方式:public bool SetCaptureProperty(CapProp property, double value); //Capture方法。具体怎么设置不知道、或者Emgu CV没有提供这个接口
时间: 2024-11-02 23:31:50

C# 通过Emgu CV播放流媒体(RTSP)的相关文章

Emgu CV播放视频

public partial class Form1 : Form {     Capture _capture;     public Form1()     {         InitializeComponent();         _capture = new Capture(“url”);//视频文件路径         _capture.ImageGrabbed += _capture_ImageGrabbed;//添加回调函数         _capture.Start();

Emgu CV 初试

Emgu CV 是.NET平台下对OpenCV图像处理库的封装,也就是.NET版.可以运行在C#.VB.VC++等. 安装完成后需要设置环境变量,比如我安装在D:\Emgu\emgucv-windows-universal-cuda 2.9.0.1922,然后再系统环境变量添加D:\Emgu\emgucv-windows-universal-cuda 2.9.0.192\bin即可 Emgu CV下载地址 http://sourceforge.net/projects/emgucv/files/

[Bada开发]播放实时rtsp流

bada是三星公司自主开发的移动操作系统,它的特点是配置灵活.用户交互性好.面向服务,非常重视SNS集成和地理位置服务应用.本文介绍了如何在bada平台实现播放实时rtsp流. bada是三星公司自主开发的移动操作系统,它的特点是配置灵活.用户交互性好.面向服务,非常重视SNS集成和地理位置服务应用.bada的设计目标是开创人人能用智能手机的时代.本文介绍了如何在bada平台实现播放实时rtsp流. 使用Osp::Media::Player类 The supported formats in s

[转载+原创]Emgu CV on C# (四) —— Emgu CV on 二值化

重点介绍了二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数)  1.概述 图像二值化是图像处理中的一项基本技术,也是很多图像处理技术的预处理过程. 图像的预处理在进行图像二值化操作前要对图像进行预处理,包括彩色图像灰化和增强.由于选取阈值需要参照直方图,因此在图像进行处理后,我们再获取图像的直方图以帮助选取阈值.整个流程如下所示: 读取图像→灰度图像→图像增强→图像直方图→二值化处理 2.数学原理(转载,基本可以不

Emgu.CV(一)

由于这块的知识不少,会分好几期写完 什么是OpenCV? OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python.Ruby.MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法.OpenCV 拥有包括 300 多个C函数的跨平台的中.高层 API.它不依赖于其它的外部库--尽管也可以使用某些外部库. 什么是Emgu.CV? Emgu

[转载+原创]Emgu CV on C# (五) —— Emgu CV on 局部自适应阈值二值化

局部自适应阈值二值化 相对全局阈值二值化,自然就有局部自适应阈值二值化,本文利用Emgu CV实现局部自适应阈值二值化算法,并通过调节block大小,实现图像的边缘检测. 一.理论概述(转载自<OpenCV_基于局部自适应阈值的图像二值化>) 局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值.这样做的好处在于每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的.亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适

[转载+原创]Emgu CV on C# (七) —— Emgu CV on 轮廓检测

轮廓检测 对于查找轮廓我们一般要对图像Canny检测.但是对于很特殊的场合其实我们还可以直接对二值化的图像进行轮廓的提取. 关键函数 1. cvFindContours Retrieves contours from the binary image and returns the number of retrieved contours. The pointer firstContour is filled by the function. It will contain pointer to

[转载+原创]Emgu CV on C# (六) —— Emgu CV on Canny边缘检测

Canny边缘检测也是一种边缘检测方法,本文介绍了Canny边缘检测的函数及其使用方法,并利用emgucv方法将轮廓检测解算的结果与原文进行比较. 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘.Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法. Canny 边缘检测的数学原理和算法实现这里就不再了,有兴趣的读者可以查阅专业书籍. 一.概述(若果不想看,可以略过.转自:<C

[转载+原创]Emgu CV on C# (一) —— Emgu CV on Visual C# 2010

2014-08-16 最近要进行图像识别,准备利用几天的时间研究一下Emgu CV,花了一晚上功夫进行调试环境安装,期间遇到了不少问题,现梳理一下安装过程和调试过程中出现的问题. 中间有转载别人的部分,有简体和繁体,还掺杂英文,就不整理了,基本都能看懂. 一.环境建立准备 本篇著在於使用Visual C# 2010 Express + EmguCV環境的建置. 環境: Visual C# 2010 Express 下載點:http://www.microsoft.com/visualstudio