net 中捕获摄像头视频的方式及对比(How to Capture Camera Video via .Net) (转)

作者:王先荣
前言
   
随着Windows操作系统的不断演变,用于捕获视频的API接口也在进化,微软提供了VFW、DirectShow和MediaFoundation这
三代接口。其中VFW早已被DirectShow取代,而最新的MediaFoundation被Windows Vista和Windows
7所支持。可惜的是,上述接口基于COM技术且灵活性很大,在.net中并不方便直接使用。
.net封装
    老外有很多活雷锋,他们奉献了不少的开源项目,DirectShow.net是对DirectShow的封装,而MediaFoundation.net 是对MediaFoundation的封装。它们都能在http://sourceforge.net上 找到。这两个封装之后的类库基本上跟原来的COM是一一对应的关系,可以用于视频捕获,但是用起来还是不够简便。
    通过不断的google搜索,我认为以下类库对视频捕获封装得不错,它们是:DirectX.Capture、OpenCv、EmguCv和 AForge。
DirectX.Capture
    DirectX.Capture是发表在CodeProject上的一个项目,它能很方便的捕获视频和音频,在窗口预览,并将结果保存到文件。使用 DirectX.Capture的示例如下:

DirectX.Capture

但是,它没有提供单独获取某帧内容的方法。如果您只是需要预览并保存视频,它很好用。
OpenCv
    OpenCv对VFW和DirectShow的视频捕获部分进行了很好的封装,能够很方便的获取到某帧的内容,也可以将结果保存到视频文件中。使用 OpenCv的示例如下:

OpenCv

不过OpenCv并未对音频捕获进行封装,如果需要同时录制音频,这个搞不定。
值得注意的是,从OpenCv 1.1开始已经实现了对DirectShow的封装,这跟网上很多人所说的OpenCv使用VFW进行视频捕获效率低下这种观点不一致。关于OpenCv 使用DirectShow的论据请看本文的附录。
EmguCv
    EmguCv是对OpenCv在.net的封装,继承了OpenCv快速的优点,同时它更加好用。使用EmguCv的示例代码如下:

EmguCv

Capture capture = new Capture(param.deviceInfo.Index);
while (!stop)
{
pbCapture.Image = capture.QueryFrame().Bitmap;
lock (lockObject)
{
stop = stopCapture;
}
}
capture.Dispose();

AForge
    AForge是一套纯正的.net开源图像处理类库,它的视频捕获类也是基于DirectShow的,但更加好用,功能更多,从使用和帮助来看更类似微软 的类库。

AForge

captureAForge = new VideoCaptureDevice(cameraDevice.MonikerString);
captureAForge.NewFrame += new NewFrameEventHandler(captureAForge_NewFrame);
captureAForge.Start();
//...
captureAForge.SignalToStop();
private void captureAForge_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
pbCapture.Image = (Bitmap)eventArgs.Frame.Clone();
}

对比
    介绍完它们之后,我们来比较下它们。它们都是基于DirectShow的,所以性能几乎一样。实际上,我个人认为,摄像头所用的硬件和驱动程序的支持对性 能影响更大。我的摄像头在Windows 7下没有专门的驱动程序,只能使用Microsoft提供的默认驱动,性能比WindowsXp要差一截。
值 得注意的是主要有几点:
    (1)只有DirectX.Capture实现了对音频的捕获;
    (2)只有DirectX.Capture不能获取单独的某帧图像;
    (3)EmguCv的免费版基于商业许可,而其他类库的许可都很宽松;
    (4)AForge的示例和帮助比较好,而且功能多些。

时间: 2024-08-05 00:19:25

net 中捕获摄像头视频的方式及对比(How to Capture Camera Video via .Net) (转)的相关文章

Java中两种实现多线程方式的对比分析

本文转载自:http://www.linuxidc.com/Linux/2013-12/93690.htm#0-tsina-1-14812-397232819ff9a47a7b7e80a40613cfe1 Java中有两种实现多线程的方式.一是直接继承Thread类,二是实现Runnable接口.那么这两种实现多线程的方式在应用上有什么区别呢? 为了回答这个问题,我们可以通过编写一段代码来进行分析.我们用代码来模拟铁路售票系统,实现通过四个售票点发售某日某次列车的100张车票,一个售票点用一个线

在 HTML5 中捕获音频和视频

简介 长久以来,音频/视频捕获都是网络开发中的"圣杯".多年来,我们总是依赖于浏览器插件(Flash 或 Silverlight)实现这一点.快来看看吧! 现在轮到 HTML5 大显身手了.也许看起来不是很显眼,但是 HTML5 的崛起引发了对设备硬件访问的激增.地理位置 (GPS).Orientation API(加速计).WebGL(GPU) 和 Web Audio API(视频硬件)都是很好的例子.这些功能非常强大,展示了基于系统底层硬件功能之上的高级 JavaScript AP

【译】如何使用Vue捕获网络摄像头视频

几个月前,我一直关注着比特币的爆发并且在GDAX网站上注册账号.在注册验证的过程中,网站提示要通过计算机的网络摄像头提交我自己的一张照片作为照片ID.这是一个很酷的做法,让我思考一个问题:在网络浏览器上集成网络摄像头使用需要怎么做? 事实上,有一些HTML5的API可用于通过JavaScript与网络摄像头进行交互. 下面,我们来看下如何创建一个VueJS的Web应用,在Web浏览器上通过网络摄像头直接捕获. 使用Vue CLI创建Vue项目 为了使项目更易于的理解,我们将从头开始搭建项目.为方

OPenCV_摄像头视频捕获并画矩形框

#include "stdafx.h" #include "opencv2/imgproc/imgproc.hpp" #include <opencv2/highgui/highgui.hpp> #include <opencv2/core/core.hpp> #include <stdio.h> #include <iostream> using namespace cv; using namespace std;

asp.net 页面中添加普通视频的几种方式

第一种 是通过调用window media player进行播放诸如:wmv,asf等格式文件: <object align=center class="OBJECT" classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 height=320 id=MediaPlayer width=356> <param name="ShowStatusBar" value="-1"> 

win10中遇到qq视频时摄像头打不开没反应的解决方法

我们在win10系统电脑的使用中,有小伙伴在win10系统的使用中,QQ是我们最常使用到的软件,我们可以直接在上面做很多的操作,qq视频摄像头视频也是我们经常需要使用到的,今天小编就来跟大家分享到我们在win10中遇到qq视频时摄像头打不开没反应的解决方法. 具体的方法和详细的步骤请添加链接描述如下: 1.点击打开开始菜单 - 电脑设置,打开电脑设置窗口:win10中遇到qq视频时摄像头打不开没反应的解决方法-01 2.在打开的电脑设置窗口中,点击打开"隐私"项进入下一步操作: 3.在

网页播放摄像头视频 一种新的实现方式(非ocx方式)

前言 出于安全性考虑,浏览器对网页调用本地资源做了诸多限制.单纯的js是不能调用本地摄像头的,最常用的解决方案是通过ocx来实现.ocx是IE浏览器的扩展插件,并不是通用标准,很多浏览器并不支持ocx.有没有别的方案实现视频播放?作者另辟蹊径,通过非常规手段实现了摄像头视频捕做:这种方案采用标准js代码实现,可以适应任何浏览器.  (一) 实现效果 图的左边是网页显示的视频,右端是本地app显示的视频.看到此图,你也许猜到实现方案的一点端倪.网页视频也是借助本地程序之力实现的:常规的实现方案是借

转 常见视频编码方式以及封装格式

常见视频编码方式以及封装格式 常见视频编码方式 所谓视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式.视频流传输中最为重要的编解码标准有国际电联的H.261.H.263.H.264.H.265,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,此外在互联网上被广泛应用的还有Real-Networks的RealVideo.微软公司的WMV以及Apple公司的QuickTime等. AVI AVI 是 Audio Video I

采集音频和摄像头视频并实时H264编码及AAC编码

0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术,适用于这种实时性的应用,通过处理采集出来的音视频的每一帧,实现实时编码,实时输出.这是我做直播系列应用的一部分,目前的情况是输入端采用DirectShow技术捕获音视频,然后对视频进行h.264编码,对音频进行aac编码,输出端则是生成文件,接下来还要进一步扩展输入端和输出端,以支持文件.桌面输入,