AForge.NET 是基于C#设计的,在计算机视觉和人工智能方向拥有很强大功能的框架。btw... it's an open source framework. 附上官网地址: http://www.aforgenet.com/aforge/framework/ 。

今天要介绍的是AForge中的视频采集功能,这里的视频包括从摄像头等设备的输入和从视频文件的输入。

首先来认识一下 视频源播放器:VideoSourcePlayer,从摄像头和文件输入的视频,都会通过它来播放,并按帧(Frame)来输出Bitmap数据。

VideoSourcePlayer 使用有这么几个重要的步骤:

  • 初始化它,设置 VideoSource 属性。VideoSource 接受 IVideoSource 类型的参数,对应到摄像头输入和文件输入,我们分别会把它设置为 VideoCaptureDevice 和 FileVideoSource。
  • 注册 NewFrame 事件,开始播放。在 NewFrame 注册的事件中处理每一帧的Bitmap。
  • 处理完成后,取消 NewFrame 事件注册,停止它。使用 SignalToStop(); and WaitForStop();

整个使用过程是非常简单的。下面分别来看看摄像头输入和文件输入的代码吧:

1. 摄像头输入

首先是初始化和开始:

// 获取视频输入设备列表
FilterInfoCollection devices = new FilterInfoCollection(FilterCategory.VideoInputDevice); // 获取第一个视频设备(示例代码,未对devices个数为0的情况做处理)
VideoCaptureDevice source = new VideoCaptureDevice(devices[].MonikerString);
// 设置Frame 的 size 和 rate
source.DesiredFrameSize = new Size(, );
source.DesiredFrameRate = ; // 设置VideoSourcePlayer的VideoSource
VideoSourcePlayer videoPlayer = new VideoSourcePlayer();
videoPlayer.VideoSource = source; videoPlayer.NewFrame += videoPlayer_NewFrame; videoPlayer.Start();

这里是NewFrame事件代码:

private void videoPlayer_NewFrame(object sender, ref Bitmap image)
{
// do sth with image
...
}

在使用完成后,停止的代码:

videoPlayer.NewFrame -= videoPlayer_NewFrame;
videoPlayer.SignalToStop();
videoPlayer.WaitForStop();

2. 文件输入

首先是初始化和开始:

// 活体对应视频路径的文件作为视频源
FileVideoSource videoSource = new FileVideoSource(videoFilePath);
videoPlayer.VideoSource = videoSource; videoPlayer.NewFrame += videoPlayer_NewFrame; videoPlayer.Start();

其余两部分代码和摄像头输入是一样的,这里就不重复了。

对于文件输入,还有一点需要注意的,有些机器的codec并不完整,导致FileVideoSource读取某些格式,比如mp4的时候会出现读取错误,这时需要安装一个codec的pack,就可以了。

好了,AForge.NET 的视频采集功能就介绍完了,接下来会再挑一些AForge中有趣的功能来做介绍。

使用 AForge.NET 做视频采集的更多相关文章

  1. 入门视频采集与处理(学会分析YUV数据)

    做视频采集与处理,自然少不了要学会分析YUV数据.因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264.MPEG视频编解码)的角度来说,也是在原始 ...

  2. 每天进步一点点------入门视频采集与处理(显示YUV数据)

    做视频采集与处理,自然少不了要学会分析YUV数据.因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264.MPEG视频编解码)的角度来说,也是在原始 ...

  3. (三)WebRTC手记之本地视频采集

    转自:http://www.cnblogs.com/fangkm/p/4374610.html 前面两篇文章介绍WebRTC的运行流程和使用框架接口,接下来就开始分析本地音视频的采集流程.由于篇幅较大 ...

  4. WebRTC手记之本地视频采集

    转载请注明出处:http://www.cnblogs.com/fangkm/p/4374610.html 前面两篇文章介绍WebRTC的运行流程和使用框架接口,接下来就开始分析本地音视频的采集流程.由 ...

  5. Linux之V4L2视频采集编程详解

     V4L2(Video For Linux Two) 是内核提供给应用程序访问音.视频驱动的统一接口. Linux系统中,视频设备被当作一个设备文件来看待,设备文件存放在 /dev目录下,完整路径的设 ...

  6. Delphi XE6 试用Android视频采集

    FMX支持视频采集,具体见FMX.Media,提供了很类支持音频.视频的处理. 按帮助文档,用Note3做了测试,结果,效率太低,不可用. 具体可查询帮助Video Capturing一节,我就是按这 ...

  7. dsp下基于双循环缓冲队列的视频采集和显示记录

    对最近在设计的视频采集和显示缓冲机制做一个记录,以便以后使用. 视频采集和显示缓冲机制,其实是参考了Linux下v4L2的驱动机制,其采用输入多缓冲frame,输出多缓冲的切换机制.简单的就是ping ...

  8. 简单的视频采集demo

    打算做个简单的聊天软件,其中一个我没做过的,就是视频采集. 在网上查了许久资料,终于搞清楚了dshow采集视频的流程 参考资料如下: https://msdn.microsoft.com/en-us/ ...

  9. 用DirectShow实现视频采集-流程构建

    DirectShow作为DirectX的一个子集,它为用户提供了强大.方便的多媒体开接口,并且它拥有直接操作硬件的能力,这使得它的效率远胜于用GDI等图形方式编写的多媒体程序.前面一篇文章已经对Dir ...

随机推荐

  1. C# DateTime转Json汇总

    DateTime转换成json的时候容易出现不想要的格式,在网上搜索了相关的解决方法copy如下: 参考http://www.newtonsoft.com/json/help/html/DatesIn ...

  2. Python——函数中的关键字参数

    关键字参数 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple.而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict.请看 ...

  3. python积累

    python积累 一.逐渐积累 python逐渐积累 http://www.cnblogs.com/lx63blog/articles/6051526.html python积累_2 http://w ...

  4. PagedDataSource、Repeater以及AspNetPager在ASP.NET上分页。

    一.前台使用服务器标签 1.1使用Repeater控件 <asp:Repeater ID="Repeater1" runat="server"> & ...

  5. Window下Qt Creator启动错误解决方法

    很多电脑现在都是用的是双显卡,高性能的独显和性能比较差但耗电少的集显,在Window10系统下右键点击软件,在"图形处理器"里面可以选择使用什么显卡操作此软件.下面是我在运行Qt ...

  6. clob型不能用 distinct,以及转换clob类型方法

    举例clob型不能用 distinct public List<WorkingPaper> findAssignedWorkPapers(String projectId, String ...

  7. python出输出字符串方式:

    python出输出字符串方式: >>> who='knights' >>> what='NI' >>> print ('we are the',w ...

  8. nginx.conf详解

    ##定义nginx运行的用户各用户组user nginx nginx; ##nginx进程数,建议设置与cpu核心数一致worker_processes 1; #为每个进程分配CPU的工作内核 wor ...

  9. php获取数据库中数据,转成json数据

    <?php //需要执行的SQL语句 //单条 $sql="select * from xinwen"; //多条数据 //$sql="select id,name ...

  10. js ShowDialogModal 关闭子页面并刷新父页面,保留查询条件

    不知道大家有没有碰到类似的问题,当时的你是什么思路来处理这个问题呢?是url,session,cookie,还是…… 今天笔者就遇到了这个问题,当时的想法如:url,session,cookie都尝试 ...