Hi@all,
ich bin gerade dabei, ein webcambild auszuwerten, indem ich auf diesem Bild nach gelben Bereichen suche, dieser Bereich aber zwischen 4 grünen Eckpunkten sein muss!
Bisheriger Ablauf:
-Webcambild wird gespeichert und dann in ein BufferedImage umgewandelt
-Es wird mit der Funktion
die Farbe des Pixels mit den Koordinaten a und b ausgelesen.
-Es werden ALLE Pixel ausgelesen.
-Wenn ein Pixel zwischen einem bestimmten Bereich von Farbwerten liegt, dann wird es in eine Arraylist gespeichert.
Der Bereich ist zum Beispiel so definiert:
-Da es auf dem Bild vier grüne "Häufungen" (Bereiche, die grün sind) gibt, werden von den gefundenen grünen Pixeln alle gelöscht, die ähnliche x-Koordinaten/y-Koordinaten haben (x+-20, y+-20).
-Es ergeben sich vier grüne Pixel.
-Nun wird die Auswertung wiederholt, nur das NICHT ALLE Pixel ausgelesen werden, sondern NUR die, die zwischen den 4 Eckpunkten liegen (und es wird NICHT nach GRÜNEN, sondern nach GELBEN Pixeln gesucht).
-Schließlich wird aus den gelben Pixeln ein Schwerpunkt errechnet, sodass sich ein gelbes Pixel mit x und y-Koordinaten ergibt.
-Es wird von dem Wert der x-Koordinate des gelben Pixels der Wert des linken (ob oberen oder unteren ist egal)Eckpunkts abgezogen.
-Bei der y-Koordinate geschieht genau das selbe.
Durch diese Auswertung habe ich immer den richtigen x-Wert(und y-Wert) des Schwerpunkts, und eben NUR zwischen den 4 grünen Punkten.
______________________________________________________________________
Das ganze klappt schon ganz gut, allerdings sind in meinem Code einige Fehler enthalten(das Programm hängt sich auf, weil es immer keine Pixel mit den entsprechenden Farbwerten findet*!).
*auch wenn:
, was eigentlich heißt, das ALLE Pixel erscheinen müssten!
Bevor ich euch den ganzen Code poste, möchte ich fragen, ob das ganze nicht viel einfacher zu realisieren wäre??
Denn so ist das SEHR zeitintensiv, allein eine Auswertung nur aller 30-ten Pixel dauert eine halbe Minute!!!
Wäre es einfacher(und schneller), wenn ich das Bild in ein binäres wandle, und dann 0 für irgendeine Farbe steht, und 1 in der ersten Auswertung für grün, in der zweiten für gelb??
oder gibt es noch andere Möglichkeiten?
Und wenn, WIE geht das dann?? (das mit dem Binären Bild kann ich auch nicht
)
Vielen Dank im Vorraus für eure Antworten
manu
ich bin gerade dabei, ein webcambild auszuwerten, indem ich auf diesem Bild nach gelben Bereichen suche, dieser Bereich aber zwischen 4 grünen Eckpunkten sein muss!
Bisheriger Ablauf:
-Webcambild wird gespeichert und dann in ein BufferedImage umgewandelt
-Es wird mit der Funktion
Java:
xyz.getRGB(a,b);
-Es werden ALLE Pixel ausgelesen.
-Wenn ein Pixel zwischen einem bestimmten Bereich von Farbwerten liegt, dann wird es in eine Arraylist gespeichert.
Der Bereich ist zum Beispiel so definiert:
Java:
Color c = new Color(rgb);
if(c.getRed()>0 && c.getRed()<=20 && c.getGreen()>200 && c.getGreen()<=255 && c.getBlue()>=0 && c.getBlue()<=20){
...
}
-Da es auf dem Bild vier grüne "Häufungen" (Bereiche, die grün sind) gibt, werden von den gefundenen grünen Pixeln alle gelöscht, die ähnliche x-Koordinaten/y-Koordinaten haben (x+-20, y+-20).
-Es ergeben sich vier grüne Pixel.
-Nun wird die Auswertung wiederholt, nur das NICHT ALLE Pixel ausgelesen werden, sondern NUR die, die zwischen den 4 Eckpunkten liegen (und es wird NICHT nach GRÜNEN, sondern nach GELBEN Pixeln gesucht).
-Schließlich wird aus den gelben Pixeln ein Schwerpunkt errechnet, sodass sich ein gelbes Pixel mit x und y-Koordinaten ergibt.
-Es wird von dem Wert der x-Koordinate des gelben Pixels der Wert des linken (ob oberen oder unteren ist egal)Eckpunkts abgezogen.
-Bei der y-Koordinate geschieht genau das selbe.
Durch diese Auswertung habe ich immer den richtigen x-Wert(und y-Wert) des Schwerpunkts, und eben NUR zwischen den 4 grünen Punkten.
______________________________________________________________________
Das ganze klappt schon ganz gut, allerdings sind in meinem Code einige Fehler enthalten(das Programm hängt sich auf, weil es immer keine Pixel mit den entsprechenden Farbwerten findet*!).
*auch wenn:
Java:
c.getRed()>0 && c.getRed()<=255 && c.getGreen()>0 && c.getGreen()<=255 && c.getBlue()>=0 && c.getBlue()<=255
Bevor ich euch den ganzen Code poste, möchte ich fragen, ob das ganze nicht viel einfacher zu realisieren wäre??
Denn so ist das SEHR zeitintensiv, allein eine Auswertung nur aller 30-ten Pixel dauert eine halbe Minute!!!
Wäre es einfacher(und schneller), wenn ich das Bild in ein binäres wandle, und dann 0 für irgendeine Farbe steht, und 1 in der ersten Auswertung für grün, in der zweiten für gelb??
oder gibt es noch andere Möglichkeiten?
Und wenn, WIE geht das dann?? (das mit dem Binären Bild kann ich auch nicht
Vielen Dank im Vorraus für eure Antworten
manu