Ich versuche zu benutzen matplotlib
ein RGB-Bild einzulesen und in Graustufen umzuwandeln.
In Matlab benutze ich Folgendes:
img = rgb2gray(imread('image.png'));
Im matplotlib-Tutorial wird es nicht behandelt. Sie lesen nur das Bild ein
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
und dann schneiden sie das Array auf, aber das ist nicht dasselbe wie das Konvertieren von RGB in Graustufen, soweit ich weiß.
lum_img = img[:,:,0]
Es fällt mir schwer zu glauben, dass Numpy oder Matplotlib keine eingebaute Funktion zum Konvertieren von RGB in Grau haben. Ist dies nicht eine übliche Operation in der Bildverarbeitung?
Ich habe eine sehr einfache Funktion geschrieben, die mit dem importierten Bild imread
in 5 Minuten funktioniert . Es ist schrecklich ineffizient, aber deshalb habe ich auf eine integrierte professionelle Implementierung gehofft.
Sebastian hat meine Funktion verbessert, aber ich hoffe immer noch, die eingebaute zu finden.
Implementierung von matlab (NTSC / PAL):
import numpy as np
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
gray = np.mean(rgb, -1)
funktioniert gut. Vielen Dank. Gibt es einen Grund, dies nicht zu verwenden? Warum sollte ich stattdessen die Lösungen in den folgenden Antworten verwenden?
np.mean(rgb, -1)
.
0.2989 * R + 0.5870 * G + 0.1140 * B
Ich gehe davon aus, dass dies die Standardmethode ist.
gray = np.mean(rgb, -1)
. Vielleichtrgb[...,:3]
da, wenn es tatsächlich rgba ist.