C#视频采集方法对比

作者:王先荣
前言
    随着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的示例如下:

Capture capture = new Capture( Filters.VideoInputDevices[0],
                               Filters.AudioInputDevices[1] );
capture.Filename = "C:\MyVideo.avi";
capture.Start();
//...
capture.Stop();

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

OpenCv


IntPtr ptrCapture = CvInvoke.cvCreateCameraCapture(param.deviceInfo.Index);
            while (!stop)
            {
                IntPtr ptrImage = CvInvoke.cvQueryFrame(ptrCapture);
                lock (lockObject)
                {
                    stop = stopCapture;
                }
            }
            CvInvoke.cvReleaseCapture(ref ptrCapture);
不过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

 

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


附录:OpenCv也用DirectShow来捕获视频
通过分析OpenCv 2.0的源代码,我得出了OpenCv使用DirectShow来捕获视频的结论。证据如下:


DirectShow In OpenCv

(1)
//_highgui.h  line:100
#if (_MSC_VER >= 1400 || defined __GNUC__) && !defined WIN64 && !defined _WIN64
 
#define HAVE_VIDEOINPUT 1

#endif

(2)
//cvcap_dshow.cpp  line:44
#ifdef HAVE_VIDEOINPUT

#include "videoinput.h"


/********************* Capturing video from camera via VFW *********************/


class CvCaptureCAM_DShow : public CvCapture

(3)
//cvapp.cpp  line:102
CV_IMPL CvCapture * cvCreateCameraCapture (int index)
{
//.....
//line:140
 switch (domains[i])

 {

        #ifdef HAVE_VIDEOINPUT

        case CV_CAP_DSHOW:

            capture = cvCreateCameraCapture_DShow (index);

            if (capture)

                return capture;

            break;

        #endif


原文地址

http://www.cnblogs.com/xrwang/archive/2010/02/13/HowToCaptureCameraVideoViaDotNet.html



  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 海康相机是一种高性能的视频采集设备,能够支持实时的视频采集和图像处理。通过海康相机,我们可以方便地获取高质量的图像数据,并进行后续的处理和分析。 具体来说,海康相机采用高清晰度的摄像头来获取图像,然后将图像数据传输到计算机或其他数据处理设备上。在采集过程中,海康相机也可以对图像进行实时的处理和调整,以便更好地适应不同的应用场景。 一旦采集到图像数据,海康相机会将其保存在指定的储存设备(如硬盘或者存储卡)上。保存的格式通常是标准的图片格式(如JPEG、PNG等),方便后续的读取和处理。 总的来说,海康相机是一种非常实用和高效的图像采集设备,可以广泛应用于安防、医疗、机器视觉等众多领域。通过它,我们可以方便地获取大量高质量的图像数据,为后续的处理和分析提供更好的基础。 ### 回答2: 海康相机是一种高质量的监控设备,其采集图像功能是其重要的一个特点。在使用海康相机采集图像时,需要进行以下步骤: 1、选择需要监控的区域并安装海康相机。可以根据需要进行选择,比如室内、室外、大厅等。 2、连接相机和电源线。将相机连接到电源,确保其能正常运行。 3、连接网线或WiFi,使相机能与网络连接。 4、设置相机参数。可以设置图像分辨率、亮度、对比度等参数,以满足不同的监控需求。 5、开启相机,开始采集图像。一旦相机开始采集图像,它会实时显示图像,并将其保存在相机中。 6、需要保存图像数据时,可以通过相机自身提供的数据存储功能进行保存。也可以将数据传输到计算机或其他设备,并进行存储。 海康相机采集图像的过程需要确保设备连通、设置参数正确、采集范围合适。在保存图像数据时要注意安全性和便捷性,并进行备份以应对意外情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值