【问题标题】:Webcams, C#, and a reliable wrapper网络摄像头、C# 和可靠的包装器
【发布时间】:2012-02-02 20:46:39
【问题描述】:

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

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

【问题讨论】:

  • 可以选择商业图书馆吗?
  • 这篇文章中的一些链接可能会有所帮助:stackoverflow.com/questions/833724/…
  • 这里还有一些示例代码:c-sharpcorner.com/UploadFile/iersoy/how-to-use-webcam-in-xna 与 XNA 相关,但可能对您有用。它基本上只是利用 DirectShow(DirectX 的一部分)。
  • 抱歉,Yahia,但广告已经播出。这个应用程序最终可能会免费和开源。
  • @user1017413 检查我的答案,我添加了一个摄像头工作的源项目。

标签: c# .net dll webcam


【解决方案1】:

是时候使用MediaCapture 对象了。将此示例用于 MS Windows 10 https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CameraStarterKit/

同时阅读这篇文章http://www.codepool.biz/csharp-camera-api-video-frame.html

【讨论】:

    【解决方案2】:

    我可以建议一下

    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();
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      试试 DirectShow.net——它是一个免费的包装库,可以从 .NET 访问 DirectShow 功能: http://directshownet.sourceforge.net

      它的代码示例也包含一个用于从网络摄像头捕获视频的示例应用程序: http://sourceforge.net/projects/directshownet/files/DirectShowSamples/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-20
        • 2020-10-15
        • 1970-01-01
        相关资源
        最近更新 更多