2017-12-30 49 views
0

Mit ImageMagick kann ich jedes Bild in eine Textdatei mit Pixel/Wert-Darstellung jedes einzelnen (RGB) Pixels konvertieren. Dies ist ein Beispiel für die Ausgabe eines 16-Bit-Integer-Datei über „konvertieren spektrum.png spektrum.txt“Holen Sie RGB-Bildpixelwerte als 16-Bit- und Fülllisten

# ImageMagick pixel enumeration: 1553,24,65535,srgba 
0,0: (16192,7721,24114,65535) #3F401E295E32FFFF srgba(25%,12%,37%,1) 
png erhielt

Dies stellt das die erste obere linke Pixel (0,0) in dem Bild mit dem rgb (a) Werte.

Frage: Wie kann ich das gleiche Bild mit Python lesen (3) in eine Liste/Array mit 16-Bit-Werten? Wenn ich Kissen verwenden dieses PNG zu lesen Datei

from PIL import Image 
im = Image.open("spektrum.png") 
pix = im.load() 
print(pix[2,5]) 
(67, 35, 99, 255) 

ich nur 0-255 RGBA-Werte von ihm.

+0

Wahrscheinlich gibt es einen einfacheren Weg, sondern versuchen, diese 'konvertieren spektrum.png -compress keine PNM: -' –

+0

@MarkSetchell nette Idee, aber das Spießen out rgb Werte in einem Muster, das ich nicht verstehe, sehe ich keine Möglichkeit, diese Ausgabe zu analysieren. Es sollte "Plain PPM (PNM)" sein, wie hier beschrieben: http://netpbm.sourceforge.net/doc/ppm.html aber die Ausgabe folgt nicht. Es sieht so aus, als ob die Ausgabe einfach R-G-B-Wert Pixel für Pixel ist, aber irgendwo sind Zeilenumbrüche, die ich nicht verstehe. –

+1

Es sieht so aus, als ob Pillow 16bit nicht unterstützt. "Entschuldigung, es ist eine Einschränkung von Pillow. Wir haben nicht die Möglichkeit mehrkanalige Bilder zu lesen, die mehr als 8 Bit pro Kanal haben." https://github.com/python-pillow/Pillow/issues/1828#issuecomment-209020147 –

Antwort

1

kann ich jetzt 16-Bit-Werte mit opencv lesen:

>>> import cv2 
>>> img = cv2.imread('spektrum.png',-1) # -1 read format as is 
>>> print(img.dtype) 
uint16 
>>> px = img[0,0] 
>>> print(px) 
[24114 7721 16192 65535] 
Verwandte Themen