# Farberkennung und -ersetzung in einem Bild



## neodynium (15. Okt 2008)

Hallo zusammen!
folgendes problem:
ich bekomme von meiner webcam über LiveCapture.image ein BufferedImage zurück und möchte in diesem bild bestimmte unifarbene objekte mit einer bestimmten farbe überlagern. zunächst einmal scanne ich das bild mittels einem einfachen bruteforse algorithmus und schau mir jedes pixel an. mir ist nur nicht wirklich klar wie ich mit der getRGB methode umgehen soll. mein objekt ist zb. ein kräftiges rot: 0xFF0000, nun ist das kräftige rot nicht an allen stellen des objektes ein kräftiges rot sondern weicht von der optimalen farbe ab. die arbeite ich mit der varianz, dass auch andere rottöne gefunden werden?!


```
int rgb;
        for( int x=0 ; x<640; x++ ) 
        { 
            for( int y=0 ; y<480; y++ ) 
            { 

                rgb = LiveCapture.image.getRGB(x, y);
 
                
                if (/**/) 
                { 
                    aaa.setRGB(x,y,0x000000); // wenn farbe gefunden ersetzen 
                } 
                else 
                { 
                    aaa.setRGB(x,y,0x00FF00); //wenn nicht setze irgendeine farbe
                } 
            } 
        }
```
mfg
andi


----------



## Marco13 (15. Okt 2008)

Prinzipiell bietet sich dafür das HSB / HSV-Farbmodell an (Wikipedia).

Die Klasse "Color" beitet auch methoden um ins HSB / HSV - Farbmodell umzurechnen. Man könnte also die "hsbvals" ausrechnen, und schauen, ob sie in einem passenden bereich liegen. Im Speziellen sollte der "hue" von den gelesenen Pixeln nur SEHR wenig von einem "reinen" Rot abweichen. Die "Saturation" sollte wenig abweichen, und die "Brightness" könnte (wenn in dem Bild z.B. ein roter Gegenstand im Schatten liegt) stark abweichen.


----------



## neodynium (15. Okt 2008)

Hey super dankeschön, das war der entscheidende gedankenanstoß! danke !!!


----------

