2012-02-02 57 views
4

我迫切需要替換C#應用程序中使用的包裝。基本上,我們需要做的是將攝像頭饋送附加到兩個圖片框中的一個。這將用於在按下按鈕時拍攝靜止圖像,該按鈕可能會分離相機送入並將靜止圖像附加到該圖像框,然後重新附加相機饋送。我們以前發現了一些免費代碼,可以利用CaptureDevice.cs文件和Pinvoke.dll將它與avicap32.dll綁定。不幸的是,這似乎具有無法可靠地再現的隨機的,間歇性的錯誤。它太脆弱了。在某個隨機點上,這些圖片框中的一個可能會變黑,並且在拍攝圖片之前不會顯示該圖片,此時正確的圖片會附加到圖片框。然後,即使只連接了一個網絡攝像頭,它也會一直提示網絡攝像頭被選中,否則就不會這樣做。網絡攝像頭,C#和一個可靠的包裝

坦率地說,我很驚訝和沮喪,微軟沒有在.NET中包含任何東西來覆蓋網絡攝像頭視頻源。我正在尋找一些可靠和相對簡單的實施來取代這個有問題的網絡攝像頭系統。

+0

是一個商業庫的選項? – Yahia 2012-02-02 20:51:23

+0

這篇文章中的一些鏈接可能有所幫助:http://stackoverflow.com/questions/833724/c-sharp-directshow-net-simple-webcam-access – CodingWithSpike 2012-02-02 20:51:50

+0

這裏也有一些示例代碼:http:// www .c-sharpcorner.com/UploadFile/iersoy/how-to-use-webcam-in-xna /與XNA相關,但可能適合你。它基本上只是進入DirectShow(DirectX的一部分)。 – CodingWithSpike 2012-02-02 20:55:41

回答

0

我可以建議

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