网络摄像头、C# 和可靠的包装器

use*_*413 5 .net c# dll webcam

我迫切需要替换 C# 应用程序中使用的包装器。基本上,我们需要做的是将网络摄像头附加到两个图片框之一。这将用于通过按下按钮来拍摄静态图像,这可能会分离相机源并将静态图像附加到该图片框,然后稍后重新附加相机源。我们之前找到了一些免费代码,可以与 CaptureDevice.cs 文件和 Pinvoke.dll 结合使用,将其绑定到 avicap32.dll 中。不幸的是,这似乎存在随机、间歇性错误,无法可靠地重现。实在是太片状了。在某个随机时刻,其中一个图片框可能会变黑,并且在拍摄照片之前不会显示提要,此时正确的图片将附加到图片框。然后,即使只连接了一个网络摄像头,它也会不断提示选择网络摄像头,否则它不会这样做。

坦率地说,我对 Microsoft 没有在 .NET 中包含任何内容来覆盖网络摄像头视频源感到惊讶和沮丧。我正在寻找可靠且相对简单的方法来取代这个有缺陷的网络摄像头系统。

cor*_*ulu 1

我可以建议吗

http://www.emgu.com/wiki/index.php/Main_Page

我已经在许多 C++ 库中使用了 OpenCV,并且从我尝试过的其他东西来看,它似乎非常适合网络摄像头。Emgu 只是 OpenCV 的 C# 包装器。

这是一个可供尝试的示例项目。它非常基本且简单,但应该可以立即使用。

http://dl.dropbox.com/u/18919663/vs%20samples/OpenCVCSharpTest.zip(刚刚上传)

样本:

using Emgu.CV;
using Emgu.CV.Structure;
...

public partial class Form1 : Form
{
    public Capture cvWebCam;
    public Form1()
    {
        InitializeComponent();

        try
        {
            cvWebCam = new Capture();
            timer1.Start();
        }
        catch
        {
            Console.WriteLine("Default camera not found or could not start");
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (cvWebCam != null)
        using (Emgu.CV.Image<Bgr, byte> frame = cvWebCam.QueryFrame())
        {
            pictureBox1.BackgroundImage = frame.ToBitmap();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)