Zeichnen Sie das Bildfarbhistogramm mit Matplotlib auf

8

Ich versuche ein Farbhistogramm eines Bildes zu erzeugen. Ich benutze PIL zum Lesen von Bilddateien und versuche dasselbe durch Matplotlib zu zeichnen.

%Vor%

Update : Nach einigem Probieren zeigt dieser Code das Histogramm, aber nicht die Farben! (Dauert mühselig lange verbraucht Tonnen von Arbeitsspeicher selbst für ein 320x480 JPEG)

%Vor%

Wo,

%Vor%

Bei der Ausführung beginnt das Programm, unendlichen Speicher zu verbrauchen, und es wird keine Anzeige bereitgestellt. Die Betriebssystemspeicherbelegung ging von & lt; 380 MB zu & gt; 2,5 GB in wenigen Minuten; Post, die ich die Ausführung beendet habe. Wie kann ich das Problem lösen?

Hier ist ein Beispiel für ein Farbhistogramm eines Bildes mit dominanten Rottönen:

    
WeaklyTyped 29.08.2012, 16:54
quelle

2 Antworten

12

Ich habe Ihren Update-Code ermüdet und es hat gut funktioniert. Hier ist genau das, was ich versuche:

%Vor%

Aktualisierung:

Ich denke, dass Matplotlib versucht, einen schwarzen Boarder um jede Bar zu legen? Wenn es zu viele Bars gibt, ist die Bar zu dünn, um Farbe zu haben? Wenn Sie die Werkzeugleiste haben, können Sie das Diagramm vergrößern und sehen, dass die Balken tatsächlich Farbe haben. Also, wenn Sie die Kantenfarbe wie folgt einstellen:

%Vor%

Es funktioniert!

Zu verarbeitendes Bild:

Ergebnis:

Profiling
Nach tottime sortiert:

%Vor%

Nach kumulativer Zeit sortiert

%Vor%

Es scheint, dass die ganze Zeit in Matplotlib verbracht wird. Wenn Sie es beschleunigen möchten, können Sie entweder ein anderes Zeichenwerkzeug finden, die Anzahl der "Balken" reduzieren, es selbst mit einem Rechteck auf einer Leinwand versuchen?

Timing:

  1. Gebuchter Code oben: 75s
  2. Zeichnen einer Zeile für jeden einzelnen, d. h. plt.plot ([n, n], [0, count] usw.): 95s
Onlyjus 29.08.2012, 17:33
quelle
1

Ich habe an einem ähnlichen Problem gearbeitet und bin 5 Jahre später auf diesen Thread gestoßen. Bei größeren Bildern dauerte die angenommene Antwort zu lange, um einfach ein Farbhistogramm eines Bildes zu erzeugen.

Ich habe openCV anstelle von PIL verwendet, um die Histogramme zu erstellen, und es ist viel schneller.

%Vor%

    
Thomas Van Der Weide 22.11.2017 22:00
quelle

Tags und Links