Я пытаюсь использовать matplotlib
чтобы прочитать изображение RGB и преобразовать его в оттенки серого.
В Matlab я использую это:
img = rgb2gray(imread('image.png'));
В уроке matplotlib они не освещают это. Они просто читают на картинке
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
и затем они нарезают массив, но это не то же самое, что преобразование RGB в оттенки серого из того, что я понимаю.
lum_img = img[:,:,0]
Мне трудно поверить, что у numpy или matplotlib нет встроенной функции для преобразования из rgb в серый. Разве это не обычная операция при обработке изображений?
Я написал очень простую функцию, которая работает с импортированным изображением imread
за 5 минут. Это ужасно неэффективно, но именно поэтому я надеялся на встроенную профессиональную реализацию.
Себастьян улучшил мою функцию, но я все еще надеюсь найти встроенную.
Реализация 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)
отлично работает. Спасибо. Есть ли причина не использовать это? Почему бы вместо этого использовать решения в ответах ниже?
np.mean(rgb, -1)
.
0.2989 * R + 0.5870 * G + 0.1140 * B
Я предполагаю, что это стандартный способ сделать это.
gray = np.mean(rgb, -1)
. Может быть,rgb[...,:3]
если это на самом деле RGBA.