# Grauwerte eines jpg ermitteln



## ARadauer (27. Jun 2008)

Hallo ich würde gerne die Grauwerte (0..255) eines Bildes ermitteln.

Also ich lade mir das Bild


```
InputStream in = new FileInputStream(imageFile);
		JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
		BufferedImage image = decoder.decodeAsBufferedImage();
```

dann wandel ich es mir in ein Graustufen Bild um


```
public static BufferedImage toGray(BufferedImage image){
		BufferedImageOp op = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY),null);
		return op.filter(image, null);		
	}
```

und aus diesem Bild hätte ich gerne für bestimmte Pixel die Grauwerte

ich hätte es mit image.getRGB(x, y) veruscht, aber ich bekomm
solche Werte raus:

-2697514 
-2697514 
-2763307 

ich brauch wirklich nur das eine byte 0..255,
wie mach ich das am besten?

(r + g +b) /3 ? macht man das so?


----------



## ARadauer (27. Jun 2008)

http://de.wikipedia.org/wiki/Grauwert

also Grauwert = 0,299·Rot + 0,587·Grün + 0,114·Blau 

gibts da nix vorgefertigtes?


----------



## Illuvatar (27. Jun 2008)

Das kannst du machen, aber wenn das Grautöne sind, sind R, G und B aber eh gleich. -2697514 enspricht zum Beispiel hexadezimal FFD6D6D6. FF ist der Alphakanal, die anderen drei Kanäle sind auf D6. Du könntest den Grauton also auch einfach mit

```
int rgbWert = // ...
int gray = rgbWert & 0xFF
```


----------



## ARadauer (27. Jun 2008)

Mhn Danke, werd ich mir ansehen, dass das der RGB Hex wert ist, auf das bin ich nicht gekommen.

So allgemeine Frage: Kennt ihr gute Bildverbeitungs Bibliotheen? Thresholding, Transformationen, Filtern, Schärfen, Linien Suchen, Histogramme....

Ist alles mit der standard API zu realisieren, aber ich denke da gibts sicher noch bessere APis die mir das alles einwenig mehr abstrahieren.


----------



## Marco13 (27. Jun 2008)

Hm. Die Standard-API ist eigentlich schon SEHR abstrahiert. Vielleicht ZU sehr: Sowas wie Kantendetektion und Thresholding (also z.B. Sobelfilter und was es da alles gibt) sind nichts anderes als eine http://java.sun.com/j2se/1.3/docs/api/java/awt/image/ConvolveOp.html mit dem passenden Kernel .... aber eine "gute", einfach zu verwendende Bibliothek, die bestimmte RasterOps "vorgefertigt" anbeitet, kenne ich nicht auswendig.


----------

