Я намагаюся використовувати 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.