PIL: Erstellen Sie ein-dimensionale Histogramm von Bild Farbhelligkeit?
Ich arbeite schon an einem Drehbuch, und ich brauche es im Grunde:
- Das Bild von Graustufen - (oder bitonal, ich Spiele mit beiden, um zu sehen, welche besser funktioniert).
- Prozess jede einzelne Spalte, und erstellen Sie eine Netto-Intensität Wert für jede Spalte.
- Spucken die Ergebnisse in einer geordneten Liste.
Es ist eine wirklich einfache Möglichkeit, dies zu tun mit ImageMagick (obwohl Sie müssen ein paar Linux-Programme zum verarbeiten der Ausgabe von text), aber ich bin nicht wirklich sehen, wie dies mit Python und PIL.
Hier ist, was ich habe, so weit:
from PIL import Image
image_file = 'test.tiff'
image = Image.open(image_file).convert('L')
histo = image.histogram()
histo_string = ''
for i in histo:
histo_string += str(i) + "\n"
print(histo_string)
Diese Ausgänge etwas (ich bin auf der Suche nach Diagramm der Ergebnisse), aber es sieht nichts, wie die ImageMagick-Ausgabe. Ich bin mit dieser zu erkennen, die Naht und die Inhalte eines gescannten Buchs.
Vielen Dank, wer hilft!
Habe ich einen (unerfreulichen) Lösung, die funktioniert, für jetzt:
from PIL import Image
import numpy
def smoothListGaussian(list,degree=5):
window=degree*2-1
weight=numpy.array([1.0]*window)
weightGauss=[]
for i in range(window):
i=i-degree+1
frac=i/float(window)
gauss=1/(numpy.exp((4*(frac))**2))
weightGauss.append(gauss)
weight=numpy.array(weightGauss)*weight
smoothed=[0.0]*(len(list)-window)
for i in range(len(smoothed)):
smoothed[i]=sum(numpy.array(list[i:i+window])*weight)/sum(weight)
return smoothed
image_file = 'verypurple.jpg'
out_file = 'out.tiff'
image = Image.open(image_file).convert('1')
image2 = image.load()
image.save(out_file)
intensities = []
for x in xrange(image.size[0]):
intensities.append([])
for y in xrange(image.size[1]):
intensities[x].append(image2[x, y] )
plot = []
for x in xrange(image.size[0]):
plot.append(0)
for y in xrange(image.size[1]):
plot[x] += intensities[x][y]
plot = smoothListGaussian(plot, 10)
plot_str = ''
for x in range(len(plot)):
plot_str += str(plot[x]) + "\n"
print(plot_str)
3D, können Sie zeigen Sie ein Beispiel der Ausgabe, die Sie suchen?
InformationsquelleAutor Blender | 2010-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich sehen, Sie sind mithilfe von numpy. Würde ich konvertieren Sie das Graustufen-Bild in ein numpy-array, dann nutzen Sie numpy um die Summe entlang einer Achse. Bonus: Sie werden wahrscheinlich finden Sie Ihre glättende Funktion läuft viel schneller, wenn Sie es beheben, um zu akzeptieren ein 1D-array als Eingabe.
JA! Das ist genau das was ich brauche! 😀
InformationsquelleAutor Paul
Vom die docs für die PIL,
histogram
gibt Ihnen eine Liste der pixel zählt für jeden Pixelwert im Bild. Wenn Sie ein Bild in Graustufen, gibt es 256 verschiedene mögliche Werte reichen von 0 bis 255, und die zurückgegebene Liste vonimage.histogram
256 Einträge.Die PIL-Betreuer bewegt, die Dokumentation link hier.
Danke @LloydMacLea-ich habe aktualisiert den link.
InformationsquelleAutor Jason Sundram