Webcam opencv zeigt schwarzes Fenster
-
Hi
Was hast du den für ein Rückgabewert bei ..
frame = cvQueryFrame( capture );zum Zeitpunkt in dem das Bild schwarz ist ?
Ansonnsten solltest du einfach mal debuggen.Edit: Probiere mal ob du mit setzen einer expliziten Resolution weiter kommst.
DWORD WINAPI webcam() { CvCapture *capture = 0; IplImage *frame = 0; int key = 0; /* initialize camera */ capture = cvCaptureFromCAM( 0 ); /* always check */ if ( !capture ) { // fprintf( stderr, "Cannot open initialize webcam!\n" ); return 1; } cvSetCaptureProperty(capture ,CV_CAP_PROP_FRAME_WIDTH , 640); cvSetCaptureProperty(capture ,CV_CAP_PROP_FRAME_HEIGHT , 480); cvSetCaptureProperty(capture ,CV_CAP_PROP_FPS , 25); /* create a window for the video */ cvNamedWindow( "result", CV_WINDOW_AUTOSIZE ); ... ... ...lowbyte
-
Hi
Eine andere Sache ist das du bei :
/* initialize camera */ capture = cvCaptureFromCAM( 0 ); /* always check */ if ( !capture ) { fprintf( stderr, "Cannot open initialize webcam!\n" ); return 1; } /// Warten bis kamera initialisiert ist !!!!! Sleep(3000);Auf die Kamera warten musst bis sie ganz initialisiert ist !
Ich hab das immer mit einer Sleep() anweisung gemacht, dabei warte ich 2 Sekunden oder mehr.Wen du es genau wissen willst kannst du es auch in einer Schleife machen, indem du :
cvQueryFrame(capture) != NULLauf ungleich NULL prüfst bis sie Initialisiert ist.
lowbyte
-
Habe alles probiert, ohne Erfolg. Hast du es denn mal versucht als Thread zu implementieren? Es wird so nicht gehen...
-
Hi
Ja das hab ich und es funktioniert !
Was gibt bei dir den cvQueryFrame() zurück in dem Zeitpunkt in dem das Fenster schwarz ist ?
Hasst du schon mal debugging betriben ?
So sollte es ohne Probleme funktionieren. Bei mir läufts so einwanfrei.
#include <stdlib.h> #include <windows.h> #include "cv.h" #include "highgui.h" DWORD WINAPI webcam(); void main() { DWORD ThreadID; CreateThread(NULL ,0 ,webcam ,(LPVOID)0 ,0 ,&ThreadID); printf("test\n"); getchar(); return 0; } DWORD WINAPI webcam() { CvCapture *capture = 0; IplImage *frame = 0; int key = 0; /* initialize camera */ capture = cvCaptureFromCAM( 0 ); /* always check */ if ( !capture ) { // fprintf( stderr, "Cannot open initialize webcam!\n" ); return 1; } /* create a window for the video */ cvNamedWindow( "result", CV_WINDOW_AUTOSIZE ); while( key != 'q' ) { /* get a frame */ frame = cvQueryFrame( capture ); /* always check */ if( !frame ) break; /* display current frame */ cvShowImage( "result", frame ); /* exit if user press 'q' */ key = cvWaitKey( 1 ); } /* free memory */ cvDestroyWindow( "result" ); cvReleaseCapture( &capture ); return 0; }lowbyte
-
lowbyte_ schrieb:
Hi
Ja das hab ich und es funktioniert !
Was gibt bei dir den cvQueryFrame() zurück in dem Zeitpunkt in dem das Fenster schwarz ist ?
Hasst du schon mal debugging betriben ?
So sollte es ohne Probleme funktionieren. Bei mir läufts so einwanfrei.
#include <stdlib.h> #include <windows.h> #include "cv.h" #include "highgui.h" DWORD WINAPI webcam(); void main() { DWORD ThreadID; CreateThread(NULL ,0 ,webcam ,(LPVOID)0 ,0 ,&ThreadID); printf("test\n"); getchar(); return 0; } DWORD WINAPI webcam() { CvCapture *capture = 0; IplImage *frame = 0; int key = 0; /* initialize camera */ capture = cvCaptureFromCAM( 0 ); /* always check */ if ( !capture ) { // fprintf( stderr, "Cannot open initialize webcam!\n" ); return 1; } /* create a window for the video */ cvNamedWindow( "result", CV_WINDOW_AUTOSIZE ); while( key != 'q' ) { /* get a frame */ frame = cvQueryFrame( capture ); /* always check */ if( !frame ) break; /* display current frame */ cvShowImage( "result", frame ); /* exit if user press 'q' */ key = cvWaitKey( 1 ); } /* free memory */ cvDestroyWindow( "result" ); cvReleaseCapture( &capture ); return 0; }lowbyte
cvQueryFrame() gibt einen Wert ungleich NULL zurück. Es kann also nicht daran liegen. Mir fiel übrigens auch auf, dass wenn ich es als eigenes Konsolenprogramm laufen lasse und auf schließen gehe, das Fenster mit einer Verzögerung geschlossen wird. Es scheint so, als würde bei einem Thread nicht alles vernünftig geladen, denn als eigenes Programm läuft es ja.
-
Woran kann das denn liegen....?
Ist doch total verrückt.
-
Hi
Leider kann ich dir auch nicht mehr weiter helfen. Weis nicht woran es noch liegen könnte. Ich habs unter VmWare-Server mit Winxp sp3 & Vista sp & Linux-Debian mit GCC getestet.
Ist ein bisschen merkwürdig !
lowbyte
-
lowbyte_ schrieb:
Hi
Leider kann ich dir auch nicht mehr weiter helfen. Weis nicht woran es noch liegen könnte. Ich habs unter VmWare-Server mit Winxp sp3 & Vista sp & Linux-Debian mit GCC getestet.
Ist ein bisschen merkwürdig !
lowbyte
Hat niemand sonst Vorschläge?? Das glaube ich nun wirklich nicht.
-
Könnte das jemand anderer noch ausprobieren?
Danke.
-
Hi
So sollte es laufen, darum kann ich mir nicht vorstellen das dir ein anderer helfen kann.
Sorry
lowbyte