繁体   English   中英

C#从网络摄像头捕获图像

[英]C# capturing image from webcam

最近两天我一直在寻找一种使用C#从网络摄像头捕获图像的方法。 我在c#中很新,我不想使用外部第三方库,所以我找到了两个不错的方法,但两者似乎都返回了几乎相同的错误。 我无法让他们中的任何一个工作,所以如果你帮助我让他们中的一个跑步或帮助我找到替代方案,那将是非常好的。

所以我找到的第一种方法是使用Windows WIA。 我找到了以下代码:

CommonDialogClass dialog = new CommonDialogClass();
Device camera = dialog.ShowSelectDevice(WiaDeviceType.CameraDeviceType, true, false);
        // take the photo 
Item item = camera.ExecuteCommand(CommandID.wiaCommandTakePicture);
ImageFile image = (ImageFile)item.Transfer(FormatID.wiaFormatJPEG);
        // filename and saving 
image.SaveFile("Test.jpg");

这段代码似乎是我正在寻找的,但我无法让它运行,因为我在第二行得到以下错误:

Exception from HRESULT: 0x80210015

我找到的第二种方法是使用带有以下示例的Avicap32.dll:

http://www.timvw.be/wp-content/code/csharp/testavicap32.zip

但是我正在使用这段代码:

Image image = ((CaptureDevice)cboDevices.SelectedItem).Capture();
image.Save(@"c:\capture.png", ImageFormat.Png);

以下异常:NullReferenceException:未将对象引用设置为对象的实例。

我认为这两种解决方案都会导致问题,因为他们无法找到我的相机,但我可以在skype中使用我的相机而没有任何问题。

  • WIA适用于静止图像,它是一种“与扫描仪配合使用的API”; 0x80210015WIA_S_NO_DEVICE_AVAILABLE
  • AVICAP32 API的名称是“Video for Windows”,它真的已被弃用和过时,它可能会解决(兼容性仍在这里),但很可能它会带你到处

使用网络摄像头的API包括:

  • DirectShow的
  • 媒体基金会

两者都是本机API,您可能很难直接从C#代码连接它们,但是使用DirectShow.NET (特别是)和Media Foundation.NET,您可以使用托管代码的包装器。 您可以在此处找到有关使用DirectShow.NET的更多信息:

我尝试了多种方法,对我来说最简单的方法是Emgu.cv(nuget package)。

        VideoCapture capture = new VideoCapture(); //create a camera capture
        Bitmap image = capture.QueryFrame().Bitmap; //take a picture

就是这样(从API版本3.3.0开始)

旧的API方法

        Capture capture = new Capture(); //create a camera captue
        Bitmap image = capture.QueryFrame().Bitmap; //take a picture

我推荐Aforge.net框架

它能够实现示例项目中使用的videoCaptureDevice类Snapshot Maker示例,以快速创建图像捕获对话框。 它比DirectShow库慢一点- 如何使用directshow库捕获图像而不在PictureBox或面板上显示网络摄像头实时图像,但它是稳定的,它是从支持的设备设置视频和图像分辨率的简单方法。

我遇到的唯一问题是VideoCaptureDevice.SimulateTrigger()使用bacjground线程从视频源创建图像并返回事件上的图像。 如果将返回的图像放在UI线程上的winform控件上,则需要委托方法来防止交叉线程问题。

从Aforge.net源SVN链接获取Snapshot Maker项目的源代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM