2010-06-17 15 views
5

Ich versuche, weiße Objekte in einem Video zu erkennen. Der erste Schritt besteht darin, das Bild so zu filtern, dass nur noch weiße Pixel übrig bleiben. Mein erster Ansatz war, den HSV-Farbraum zu verwenden und dann nach einem hohen Pegel des VAL-Kanals zu suchen. Hier ist der Code:Was ist der beste Weg, weiße Farbe zu erkennen?

//convert image to hsv 
cvCvtColor(src, hsv, CV_BGR2HSV); 
cvCvtPixToPlane(hsv, h_plane, s_plane, v_plane, 0); 

for(int x=0;x<srcSize.width;x++){ 
    for(int y=0;y<srcSize.height;y++){ 
    uchar * hue=&((uchar*) (h_plane->imageData+h_plane->widthStep*y))[x]; 
    uchar * sat=&((uchar*) (s_plane->imageData+s_plane->widthStep*y))[x]; 
    uchar * val=&((uchar*) (v_plane->imageData+v_plane->widthStep*y))[x]; 

    if((*val>170)) 
     *hue=255; 
    else 
     *hue=0; 
    } 
} 

das Ergebnis in den Farbton-Kanal verlassen. Leider ist dieser Ansatz sehr lichtempfindlich. Ich bin mir sicher, dass es einen besseren Weg gibt. Irgendwelche Vorschläge?

Antwort

2

Es wird empfindlich für die Beleuchtung - was passiert, wenn Sie es unter einem roten Licht sehen!
Ich weiß nicht, ob die Verwendung von YUV-Speicherplatz viel einfacher ist als die Suche nach ähnlichen RGB-Werten.

bearbeiten - normalerweise würden Sie etwas ohne Farbe grau anrufen (könnte Ihnen bei der Suche helfen).
Wenn Sie eine Wahl haben, ist dies die schlechteste Farbe, nach der Sie suchen, da sie jede andere Beleuchtung in der Szene widerspiegelt. Sie müssen also die gesamte Beleuchtungsfarbe erkennen und anpassen.

Sie suchen also Pixel mit ähnlichen RGB-Werten oder RGB-Werte im Verhältnis des Durchschnitts für Objekte in der Szene.

+0

Ich meine weiß = grau = keine Farbe, eigentlich versuche ich weiße Plastikgläser zu erkennen. Hier ist ein Beispielbild: http://tinypic.com/r/14t1p1x/6 – dnul

+0

Ich bin mir nicht sicher, du sagst, dass, wenn ich ein rotes Licht auf die Oberseite setze, die Farbe der Gläser irgendwie rötlich würde und anstatt nach weißen Pixeln zu suchen, sollte ich nach ähnlichen Pixeln suchen, egal welche Farbe? – dnul

+3

Wenn Sie weiße Objekte in einer Szene haben und sie mit einem roten Licht anzünden, werden sie rot aussehen! In diesem Fall müssen Sie die Farbe eines "weißen" Objekts finden und nach dieser Farbe suchen –

2

Warum verwenden Sie HSV? Es wäre sinnvoller, in HSL zu konvertieren und den Luminanzkanal zu verwenden. Natürlich erhalten Sie nicht nur Weiß, sondern jede Farbe mit hoher Leuchtdichte über einer Schwelle. Schließlich können Sie sich nicht auf reines Weiß verlassen, es sei denn, Ihr Quellbild wurde überbelichtet.

2

Eine andere Möglichkeit wäre, Ihr Bild in Graustufen zu verwandeln. Weiß wird sehr hohe Werte haben (fast> 225).

Noch ein anderer Weg wäre, UND die R, G und B Ebenen. Nur die Weißen bleiben in dem resultierenden Bild. Auf diese Weise verbringen Sie keine Zeit damit, die Konvertierung in den HSV-Farbraum zu berechnen. Sie machen nur eine einfache UND-Verknüpfung bei jedem Pixel.

Verwandte Themen