2

我是 xna 的新人

我想使用我的网络摄像头并将网络摄像头图像作为 3D 模型的背景纹理

有没有调用网络摄像头的功能

感谢您的建议

4

3 回答 3

4

如果您查看 AForge 框架,您会发现一个在网络摄像头源上进行运动检测的示例程序。

http://code.google.com/p/aforge/

这个框架有一个很容易获取网络摄像头的方法。

基本上结束了

VideoCaptureDevice device = new VideoCaptureDevice(monikor);
device.NewFrame += new AForge.Video.NewFrameEventHandler(webcam_NewFrame);
webcam.Start();

您可以通过调用类似于...的代码来获取网络摄像头的监视器

FilterInfoCollection webcamList = new FilterInfoCollection(FilterCategory.VideoInputDevice);

foreach(FilterInfo info in webcamList)
{
    string monikor = info.MonikorString;
    string deviceName = info.Name;
}

这是我遇到的获取网络摄像头提要的最佳/最简单的方法。

然后你就可以把Bitmap转换成Texture2D并随意显示了!

于 2010-01-05T13:11:32.083 回答
0

前段时间我自己遇到了这个问题,这是我想出的一个相当混乱的解决方案。

首先,你需要使用motion_src库,你可以在这里找到:

http://www.codeproject.com/KB/audio-video/Motion_Detection.aspx

该教程都是关于运动检测的,但是如果您下载演示代码,您可以在它捕获来自相机的输入的地方进行操作。

现在,将其添加为您的 xna 项目的引用。

一旦系统设置好从摄像头捕获提要(所有详细信息都在该教程中,我不会在这里重复),您需要复制提要(捕获到 System.Drawing.Bitmap 到xna 纹理。

Texture2D image;

b = (System.Drawing.Bitmap)camera.LastFrame.Clone();
for (int j = 0; j < image.Height; j++)
{
    for (int i = 0; i < image.Width; i++)
    {
        c = b.GetPixel(i, j);
        colours[i + j * image.Width] = new Color(c.R, c.G, c.B, byte.MaxValue);
    }
}
image.SetData<Color>(colours);

然后,您可以使用对 spritebatch 的正常调用来显示图像纹理:)

于 2009-11-24T14:09:25.640 回答
0

您可以使用第三方VideoTexture 类。它可以使用网络摄像头或 AVI、MPEG 或 WMV,并允许您访问 Texture2D 对象,将当前帧作为可与 spritebatch 一起使用或应用于 3D 对象的图像。

  1. 将 VideoTexture.cs 文件复制到您自己的项目中。
  2. 将 VideoTexture.cs 文件中的命名空间更改为您的项目命名空间的名称。
  3. 从 DirectShow.NET 库中添加对 DirectShowLib-2005.dll 的引用。
  4. 编译它。VideoTexture 类现在应该在您的项目中可用。

我从未使用过它,但如果您下载文档,它应该会有所帮助。只需创建一个 VideoTexture,并使用它的 VideoTexture2D 属性来检索 Texture2D。然后您可以将其设置为某些 3D 对象的每个效果的纹理。

于 2009-11-27T07:37:57.340 回答