2011-01-11 12 views
3

Ich kann kein Bild von meiner Webcam mit dem folgenden OpenCV-Code aufnehmen.OpenCV kann kein Bild von der isight Webcam aufnehmen

Der Code kann Bilder aus einer lokalen AVI-Datei oder einem Videogerät anzeigen. Es funktioniert gut für eine "test.avi" -Datei.

Wenn ich meine Standard-Webcam machen (CvCapture * capture = cvCreateCameraCapture (0)), kann das Programm die Größe des Bildes von der Webcam erfasst, sondern nur nicht in der Lage um das Bild anzuzeigen.

/Ich vergaß zu erwähnen, dass ich die iSight funktioniert sehen kann, weil die LED-Anzeige auf/

Jeder begegnet das gleiche Problem drehen wird?

cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE); 

CvCapture* capture =cvCreateFileCapture("C:\\test.avi") ;// display images from avi file, works well 
// CvCapture* capture =cvCreateCameraCapture(0); //display the frame(images) from default webcam not work 

assert(capture); 
IplImage* image; 

while(1) { 
image = cvQueryFrame(capture); 
    if(!image) break; 

    cvShowImage("Example2", image); 

    char c = cvWaitKey(33); 
    if(c == 27) break; 
} 

cvReleaseCapture(&capture); 
cvDestroyWindow("Example2"); 
  • opencv 2.2
  • Debug-Bibliothek * d.lib
  • Webcam iSight
  • Macbook OS win7 32
  • VS2008
+0

Ich habe genau das gleiche Problem und fast das gleiche Setup (win7 64). Ich habe versucht, opencv mit und ohne qt-Unterstützung zu bauen, aber nichts funktioniert. – mwahab

Antwort

1

Versuchen Sie das Beispiel aus den opencv page ?

nämlich

#include "cv.h" 
#include "highgui.h" 

using namespace cv; 

int main(int, char**) 
{ 
    VideoCapture cap(0); // open the default camera 
    if(!cap.isOpened()) // check if we succeeded 
     return -1; 

    Mat edges; 
    namedWindow("edges",1); 
    for(;;) 
    { 
     Mat frame; 
     cap >> frame; // get a new frame from camera 
     cvtColor(frame, edges, CV_BGR2GRAY); 
     GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); 
     Canny(edges, edges, 0, 30, 3); 
     imshow("edges", edges); 
     if(waitKey(30) >= 0) break; 
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor 
    return 0; 
} 

Arbeiten auf einem macbook pro für mich (obwohl auf OS X). Wenn es nicht funktioniert, wäre eine Art Fehlermeldung hilfreich.

+0

Danke für Ihre Antwort. Das Problem ist noch nicht gelöst.Wenn ich den "Frame" überprüfe, sind die Zeilen und Clos korrekt (480 * 640). Ich bin mir nicht sicher, wie dieser "Frame" aussehen soll. Ich habe einen Screenshot für diesen Rahmen finden Sie hier http://dusijun.wordpress.com/2011/01/11/opencv-unable-to-capture-image-from-isight-webcam/ Bild 3 –

+0

Tut die Webcam mit anderen Programmen arbeiten? Könnte nur ein Treiberproblem sein. – etarion

+0

Ja, es funktioniert, wenn ich mit directshow programmiere. –

-1

Warum nicht Sie versuchen

capture=cvCaptureFromCam(0); 

Ich denke, das funktioniert.

Lassen Sie mich wissen, ob es funktioniert oder nicht.

+0

Hallo, danke für deinen Vorschlag, es funktioniert nicht. –

+0

Ich fühle, dass es ein Bug oder ein Treiberproblem ist –

3

Ich arbeite an opencv 2.3 mit Pro Macbook Mitte 2012 und ich dieses Problem mit der Isight Cam. Irgendwie schaffte ich es, indem einfach die Parameter des Cvcapture auf opencv funktioniert und das Einstellen der Bildbreite und -höhe:

CvCapture* capture = cvCaptureFromCAM(0); 
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 500); 
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 600); 

Sie können auch diese Zahlen auf die Rahmenbreite und Höhe Sie ändern.

1

Try this:

int main(int, char**) { 
    VideoCapture cap(0); // open the default camera 
    if (!cap.isOpened()) { // check if we succeeded 
     cout << "===couldn't open camera" << endl; 
     return -1; 
    } 
    Mat edges, frame; 
    frame = cv::Mat(10, 10, CV_8U); 
    namedWindow("edges", 1); 
    for (;;) { 
     cap >> frame; // get a new frame from camera 
     cout << "frame size: " << frame.cols << endl; 
     if (frame.cols > 0 && frame.rows > 0) { 
      imshow("edges", frame); 
     } 
     if (waitKey(30) >= 0) 
      break; 
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor 
    return 0; 
} 
Verwandte Themen