Webcam opencv zeigt schwarzes Fenster
-
lowbyte_ schrieb:
Hi
Habs grad getestet da ich auch an einem Project arbeite mit opencv.
So sollte es funktionieren.
Einzubindende lib's(obwohl einige davon nicht gebraucht werden) für dies kleine Program.
cv210.lib cv210d.lib cvaux210.lib cvaux210d.lib cxcore210.lib cxcore210d.lib cxts210.lib highgui210.lib highgui210d.lib ml210.lib ml210d.lib opencv_ffmpeg210.lib opencv_ffmpeg210d.lib#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
Habs getestet. Tritt leider wieder dasselbe Problem auf.
-
Hi
Was hast du für ein OS,Compiler.etc ?
lowbyte
-
Hi
Und was für eine Webcam ?
Sollte mich mal anmelden :p
-
Ja mach das

Ich hab Windows 7, VC++ 2010 und nen Sony Vaio Laptop mit integrierter WebCam. Als eigenes Programm läuft es ja problemlos, bloß wenn man es als Thread startet, nicht.
-
Hat keiner eine Idee?
-
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