2010-12-13 17 views
9

Ich habe OpenCV 2.2 installiert und jetzt kann ich Webcam Capture nicht funktionieren. Es funktionierte in 2.1. OpenCV erkennt eine Webcam, meldet keine Fehler oder Warnungen, aber jedes Bild ist ein graues Bild. Ich probierte sogar ein Codebeispiel von OpenCV Wiki:OpenCV Webcam Capture-Problem

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; 

Hat jemand in dieses Problem laufen? Ich verwende 64bit Win7 und Visual Studio 2010.

+2

Was meinen Sie mit " ein graues Bild "? Solides Grau, ohne Struktur? Oder nur ein Graustufenbild? Sie rufen cvtColor() auf, um das Bild zu graustufen, und der Aufruf von imshow() zeigt die Graustufenversion an ... – jtdubs

+0

Solides Grau, keine Graustufen. – Figaro

+0

Manchmal ist dieses ib ein bisschen langsam. Fügen Sie vor Mat-Kante ein 'sleep (1)' oder 'cv :: waitKey (100)' hinzu und fügen Sie dasselbe innerhalb der for-Schleife hinzu. Das sollte funktionieren. Und vergiss nicht, zu prüfen, ob "frame" ein proper Bild ist. – nutario

Antwort

1

Ich weiß wirklich nichts über OpenCV, aber ist das Problem nicht auf der folgenden Zeile?

cvtColor(frame, edges, CV_BGR2GRAY); 

Scheint so, als ob Sie absichtlich einen B-G-R-Farbraum in einen Graustufenraum umwandeln.

Sollte es nicht so etwas wie:

cvtColor(frame, edges, CV_BGR2RGB); 
+0

die meisten Kantenerkennung Algorithmen arbeiten nur auf Graustufenbildern - das Op zeigt das Graustufenbild anstelle der ursprünglichen Farbe ein –

+0

Das ist das Problem, indem ich meine Meinung zu einer Sache, die ich nicht weiß ... :) Ich dachte, das Problem war das Graustufenbild, nicht ein graues Bild selbst ... Dumm ich. :) – Machado

9

ich die Lösung nach einer sehr langen Suche gefunden.

Das Problem ist, dass, wenn keine Verzögerung zwischen dem Anzeigen der Frames dieses Problem auftritt.

Die Lösung wird cvWaitKey(20); in Schleife gelegt.

+1

Ich wollte nur einen Kommentar hinzufügen, dass dies mein Problem behoben! Danke :) – amr

3

Das Problem war mit der Kamera, die ich verwendete, MSFT LifeCam. Ich habe Logitech C210 und 120 ausprobiert und beide funktionieren gut.

0

Sie könnten auch einen Blick auf this post versuchen.

es einfach zu setzen,

Wechsel

von

Import cv

zu

Import cv2.cv als cv

arbeitete für mich. Siehe auch den Beitrag here.

3

Hier ist die Lösung.

Jedes erfasste Bild wird in der ersten Zeile unten in ein Graustufenbild umgewandelt. Das Kommentieren und Ausführen des Codes allein zeigt einen Fehler, da Sie kein verarbeitetes Bild in den Kantenrahmen aufnehmen, der in imshow angezeigt wird.

Kommentieren Sie daher die Zeile cvtColor und ändern Sie den zweiten Parameter in imshow zu frame. Dadurch können Sie das Farbvideo von der Webcam anzeigen.

cvtColor(frame, edges, CV_BGR2GRAY); 

imshow("edges", frame); 
0

Ich hatte das gleiche Problem. Ich dachte, dass es die Einstellungen an meiner Kamera sein könnten, da ich eine Eingabe von 640x480px haben sollte (die ich nicht anpassen konnte) und ich konnte die Berechtigungen für den Feed nicht anpassen. Also habe ich eine virtuelle Webcam installiert, die beide Probleme recht gut gelöst hat. Ich habe einen Eingabedialog, wählte die virtuelle Kamera und es funktionierte. Ich habe es auch in der App auf 640x480 gesetzt.

Meine virtuelle Kamera hieß ManyCam, aber sie sieht aus wie für Teenager, wollte, dass ich 3 andere Apps installiere und ich bin mir immer noch nicht sicher, ob es nicht mit "komplementären" Trojanern kommt.

Sie können jedoch Farben, Farbton, Kontrast usw. und andere Dinge anpassen, die Sie zum Testen benötigen könnten.

+0

Sie sollten lieber einen Kommentar hinterlassen, um zu fragen, ob das Hinzufügen einer virtuellen Kamera zulässig ist. – StarPinkER

0

Ich verwende cvtColor und fand, dass

cvtColor(image,image,CV_BGR2RGB); nicht funktionierte.

Aber die gute Nachricht ist, dass diese Änderung funktioniert !!

cvtColor(image,image,**COLOR_BGR2RGB**); 

schließen auch ein:

include opencv2/imgproc/imgproc.hpp 

und in der .pro-Datei der Bibliothek:

-lopencv_imgproc 
0

Try this:

VideoCapture cap(0); // open the default camera 
if(!cap.isOpened()) // check if we succeeded 
{ 
    cout<<"Cam not captured\n"; 
} 

Mat frame; 
namedWindow("frame"); 
for(;;) 
{ 
    cap >> frame; // get a new frame from camera 
    imshow("frame", frame); 

    if(waitKey(10) >= 0) break; 
} 

return 0; 
Verwandte Themen