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?
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
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
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 –