Frage

Ich mache ein Programm in C # zu einer Webcam zu verbinden und damit eine Bildmanipulation zu tun. Ich habe eine funktionierende Anwendung, die Win32-API verwendet (avicap32.dll) zur Webcam zu verbinden und Nachrichten an sie senden, die ihn in die Zwischenablage sendet. Das Problem ist, dass, während accesible von Farbe, sie von den Programmergebnissen in Null-Zeiger zu lesen.

Dies ist der Code, den ich verwende, um die Webcam zu verbinden:

mCapHwnd = capCreateCaptureWindowA("WebCap", 0, 0, 0, 320, 240, 1024, 0);

SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0);
SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0);

Und das ist, was ich benutze das Bild in die Zwischenablage zu kopieren:

SendMessage(mCapHwnd, WM_CAP_GET_FRAME, 0, 0);

SendMessage(mCapHwnd, WM_CAP_COPY, 0, 0);
tempObj = Clipboard.GetDataObject();
tempImg = (System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap);

Theres einige Fehlerprüfung, die ich aus dem Code entfernt habe, um es kürzer zu machen.

Vielen Dank im Voraus:)

War es hilfreich?

Lösung

Ich habe vor kurzem begonnen haben in diesem Bereich einige Hobby Arbeit zu tun.

Wir über die Verwendung der OpenCV Bibliothek mit der opencvdotnet -Wrapper. Es unterstützt Frames von einer Webcam erfasst wird:

using (var cv = new OpenCVDotNet.CVCapture(0))
{
    var image = cv.CreateCompatibleImage();
    // ...
    cv.Release();
}

Und wenn Sie Bildmanipulation tun, Bildverarbeitungsalgorithmen der OpenCV haben Baugruppe innerhalb der OpenCVDotNet.Algs gewickelt worden ist.

Wenn Sie sich entscheiden, diesen Weg zu gehen sicher sein, OpenCV Version 1.0 (und installieren Sie es installieren zu "c: \ program files \ opencv", wenn Sie auf Vista sind 64-Bit oder „mklink OpenCV‚c: \ program files (x86) \ OpenCV`“aus dem richtigen Verzeichnis oder sonst opencvdotnet nicht installieren).

Andere Tipps

Es gibt wirklich zwei Möglichkeiten, Kameradaten in Ihre Anwendung, Directshow und WIA zu bekommen. Microsoft empfiehlt die Verwendung der WIA und die Schnittstelle für WIA ist ziemlich einfach zu wickeln Ihr Gehirn um. Ich habe und veröffentlichte eine Open-Source- WIA Desktop-Bibliothek auf der Arbeit basiert ich habe vor einiger Zeit.

Jetzt ist das Problem mit WIA in einigen Fällen ist, dass es zu einfach ist. Zum Beispiel, wenn Sie Kameraeigenschaften anpassen möchten (wie Bildrate, Auflösung, usw.), dann fällt WIA nach unten. Microsoft veraltet Directshow, aber sie haben uns wirklich keinen Ersatz geben, dass alle seine Fähigkeiten hat, und ich habe festgestellt, dass es auf allen bestehenden Plattformen funktionieren weiterhin (sehr tief verwurzelte ist, so kann ich mir nicht vorstellen Unterstützung weggeht jederzeit schnell).

Es gibt eine sehr gute Directshow Bibliothek über bei Source . Das einzige „Problem“ mit ihm ist es wirklich komplex und ergibt sich aus der Tatsache, dass DShow ist nur so verdammt komplex und verwirrend an erster Stelle. Es gibt viele Dinge, die der Wrapper tun können, sind einfach nicht leicht zu trainieren, aber sie bieten Proben für viele der häufigsten Anwendungsfälle wie Video zeigt oder einen Rahmen zu erfassen. Wenn Sie Overlays hinzufügen möchten, oder andere Filter einsetzen, kann sie es tun, aber seien Sie gewarnt, dass es überhaupt nicht einfach ist.

Werfen Sie einen Blick auf diesen Artikel: http://www.codeproject.com/KB/miscctrl/webcam_c_sharp.aspx

Es ist viel zu einfacher als die Installation und Verwendung OpenCVNetWrapper.

Haben Sie Clipboard.GetImage versucht ()? Sie könnten auch versuchen, die verschiedenen Clipboard.Contains * () Methoden, um zu sehen, welches Format die Daten in der Zwischenablage gespeichert.

OpenCV capture, EMGU Capture und alle anderen Capture-Bibliotheken, die ich versucht habe
alle haben das gleiche Problem: Sie können nicht höher gehen kann als 640x480 programmatisch
(Ohne das Fenster Videoquelle Fenster zu öffnen).

Ich schlage vor, mit diesen (das funktioniert):
https://github.com/ofTheo/videoInput

Dies wurde auch in Wie Web-Cam Bilder in C # erhalten ? und möglicherweise die folgende nützliche (Sorry für Spamming, aber das hilft wirklich die Frage zu beantworten) finden:

Ich habe gerade den kompletten Sourcecode meiner Windows-Anwendung CamTimer (geschrieben in .NET / C #) freigegeben. Download / Den vollständigen Code (mit Webcam Arbeitsbeispielen) unter https://github.com/johanssonrobotics/CamTimer

Happy Codierung!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top