Próbuję użyć matplotlib
do odczytania obrazu RGB i przekonwertowania go na skalę szarości.
W Matlabie używam tego:
img = rgb2gray(imread('image.png'));
W samouczku matplotlib nie obejmują tego. Po prostu czytają na obrazku
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
a następnie wycinają tablicę, ale to nie to samo, co konwersja RGB na skalę szarości z tego, co rozumiem.
lum_img = img[:,:,0]
Trudno mi uwierzyć, że numpy lub matplotlib nie ma wbudowanej funkcji do konwersji z rgb na grey. Czy to nie jest powszechna operacja przetwarzania obrazu?
Napisałem bardzo prostą funkcję, która działa z obrazem zaimportowanym za imread
5 minut. Jest to okropnie nieefektywne, ale dlatego liczyłem na wbudowane profesjonalne wdrożenie.
Sebastian poprawił moją funkcję, ale nadal mam nadzieję znaleźć wbudowaną.
Implementacja matlaba (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)
działa dobrze. dzięki. Czy jest jakiś powód, aby tego nie używać? Dlaczego miałbym zamiast tego korzystać z rozwiązań zawartych w poniższych odpowiedziach?
np.mean(rgb, -1)
.
0.2989 * R + 0.5870 * G + 0.1140 * B
Zakładam, że to standardowy sposób na zrobienie tego.
gray = np.mean(rgb, -1)
. Możergb[...,:3]
tam, jeśli to rzeczywiście rgba.