使用 AForge.NET 做视频采集
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 做视频采集的更多相关文章
- 入门视频采集与处理(学会分析YUV数据)
做视频采集与处理,自然少不了要学会分析YUV数据.因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264.MPEG视频编解码)的角度来说,也是在原始 ...
- 每天进步一点点------入门视频采集与处理(显示YUV数据)
做视频采集与处理,自然少不了要学会分析YUV数据.因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264.MPEG视频编解码)的角度来说,也是在原始 ...
- (三)WebRTC手记之本地视频采集
转自:http://www.cnblogs.com/fangkm/p/4374610.html 前面两篇文章介绍WebRTC的运行流程和使用框架接口,接下来就开始分析本地音视频的采集流程.由于篇幅较大 ...
- WebRTC手记之本地视频采集
转载请注明出处:http://www.cnblogs.com/fangkm/p/4374610.html 前面两篇文章介绍WebRTC的运行流程和使用框架接口,接下来就开始分析本地音视频的采集流程.由 ...
- Linux之V4L2视频采集编程详解
V4L2(Video For Linux Two) 是内核提供给应用程序访问音.视频驱动的统一接口. Linux系统中,视频设备被当作一个设备文件来看待,设备文件存放在 /dev目录下,完整路径的设 ...
- Delphi XE6 试用Android视频采集
FMX支持视频采集,具体见FMX.Media,提供了很类支持音频.视频的处理. 按帮助文档,用Note3做了测试,结果,效率太低,不可用. 具体可查询帮助Video Capturing一节,我就是按这 ...
- dsp下基于双循环缓冲队列的视频采集和显示记录
对最近在设计的视频采集和显示缓冲机制做一个记录,以便以后使用. 视频采集和显示缓冲机制,其实是参考了Linux下v4L2的驱动机制,其采用输入多缓冲frame,输出多缓冲的切换机制.简单的就是ping ...
- 简单的视频采集demo
打算做个简单的聊天软件,其中一个我没做过的,就是视频采集. 在网上查了许久资料,终于搞清楚了dshow采集视频的流程 参考资料如下: https://msdn.microsoft.com/en-us/ ...
- 用DirectShow实现视频采集-流程构建
DirectShow作为DirectX的一个子集,它为用户提供了强大.方便的多媒体开接口,并且它拥有直接操作硬件的能力,这使得它的效率远胜于用GDI等图形方式编写的多媒体程序.前面一篇文章已经对Dir ...
随机推荐
- C# DateTime转Json汇总
DateTime转换成json的时候容易出现不想要的格式,在网上搜索了相关的解决方法copy如下: 参考http://www.newtonsoft.com/json/help/html/DatesIn ...
- Python——函数中的关键字参数
关键字参数 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple.而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict.请看 ...
- python积累
python积累 一.逐渐积累 python逐渐积累 http://www.cnblogs.com/lx63blog/articles/6051526.html python积累_2 http://w ...
- PagedDataSource、Repeater以及AspNetPager在ASP.NET上分页。
一.前台使用服务器标签 1.1使用Repeater控件 <asp:Repeater ID="Repeater1" runat="server"> & ...
- Window下Qt Creator启动错误解决方法
很多电脑现在都是用的是双显卡,高性能的独显和性能比较差但耗电少的集显,在Window10系统下右键点击软件,在"图形处理器"里面可以选择使用什么显卡操作此软件.下面是我在运行Qt ...
- clob型不能用 distinct,以及转换clob类型方法
举例clob型不能用 distinct public List<WorkingPaper> findAssignedWorkPapers(String projectId, String ...
- python出输出字符串方式:
python出输出字符串方式: >>> who='knights' >>> what='NI' >>> print ('we are the',w ...
- nginx.conf详解
##定义nginx运行的用户各用户组user nginx nginx; ##nginx进程数,建议设置与cpu核心数一致worker_processes 1; #为每个进程分配CPU的工作内核 wor ...
- php获取数据库中数据,转成json数据
<?php //需要执行的SQL语句 //单条 $sql="select * from xinwen"; //多条数据 //$sql="select id,name ...
- js ShowDialogModal 关闭子页面并刷新父页面,保留查询条件
不知道大家有没有碰到类似的问题,当时的你是什么思路来处理这个问题呢?是url,session,cookie,还是…… 今天笔者就遇到了这个问题,当时的想法如:url,session,cookie都尝试 ...