USB-Web-Cam unter C/C++ und Windows auslesen

Hallo, liebe Experten,

ich möchte ein Programm schreiben, mit dem ich die Daten einer Web-Cam auslesen und auf dem Bildschirm darstellen kann. Das habe ich mit vfw (Video for Windows) versucht, mit Befehlen wie

SendMessage(camhWnd, WM\_CAP\_SET\_PREVIEW, TRUE , 0);

gelingt das auch. Leider scheint diese Methode sehr langsam zu sein, und es werden keineswegs 15 Bilder pro Sekunde dargestellt, sondern viel weniger, es ist sehr ruckelig.

In Programmen wie Amcap oder ManyCam funktioniert die fließende Bildanzeige aber sehr wohl.

Gibt es eine halbwegs einfache Alternative zu vfw, mit der ich eine fließende  Bildanzeige erreichen kann, bei der kein Frame verloren geht und ohne zu ruckeln? Mit halbwegs einfach meine ich: kein MFC oder dergleichen Framework, sondern einfache native Befehle wie z. B. DeviceIoControl(…) , um den Treiber usbvideo.sys anzusprechen (ich glaube, mit VC Studio Express geht MFC ohnedies nicht).

Grüße,

I.

Hallo,

ich weiß leider nicht, wie gut deine Kentnisse im Allgemeinen sind.

Schau dir doch einfach mal OpenCV an. Das ist eine nette Bibliothek für Bildbearbeitung. Nebenbei kannst du mit ihr auf sehr einfache Art und Weise auch eine Webcam auslesen.

Grüße

Hallo I

In Programmen wie Amcap oder ManyCam funktioniert die
fließende Bildanzeige aber sehr wohl.

Die machen das sicher mit DirectShow, also DirectX. Kann Dir aber dazu weiter nichts sagen. Im MSDN findest Du massig Funktionen, die mit cap* beginnen (für „capture“), vielleicht hilft das.

lG
Martin

Hallo Mimon und Selaskou,

danke für Eure Antworten.

Ich kann schon ziemlich gut in C (selten C++) und auf Basis der Windows APIs programmieren. Schwieriger finde ich es, andere Quelltexte, sofern sie objektorientiert geschrieben sind, zu analysieren und herauszufinden, wie es konkret funktioniert. Inzwischen habe ich das Windows SDK 7 installiert und darin zwei Beispiele für Webcam-Programme gefunden: simple-capture (beruht auf „Media-Foundation“)und AMCap, habe auch beides compiliert und zum Laufen gebracht. OpenCV werde ich mir dazu als Nächstes anschauen.

Bei den bisherigen Varianten (auf Basis von vfw, sowie simple-capture und AMCap) kommt es mir vor, als wenn die Funktionen, die die Bilder auf dem Bildschirm anzeigen, nur zum Mitschauen (Preview) gedacht sind, wo es egal ist, ob einzelne Bilder ausfallen, und diese Preview-Funktionen von vornherein mit niedrigerer Priorität laufen. Ich möchte aber Experimente mit Bildverarbeitung machen und möchte alle Einzelbilder. Für dieses soche ich eine Möglichkeit.

Mit den diversen Frameworks, oder auch mit DirectX kenne ich mich bisher nicht aus, und habe diese Dinge immer gemieden. Wenn es nur mit DirectX geht, werde ich mich damit befassen und hoffe, daß der Aufwand nicht zu groß ist.

Grüße,

I.