Преобразование массива цветных изображений в массив массивов серого - PullRequest
0 голосов
/ 13 октября 2018

Как преобразовать массив из двух цветных изображений в массив из двух серых изображений с помощью функции to_grayscale (из этого сайта ), представленной ниже.

Важно: Я не хочу файлы изображений, я хочу массив image_g, определенный ниже.

Сначала создайте функцию и примеры изображений:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['image.cmap'] = 'gray'
np.random.seed(0)

def to_grayscale(im):
    tile = np.tile(np.c_[0.333, 0.333, 0.333], reps=(im.shape[0],im.shape[1],1))
    return np.sum(tile * im, axis=2)

images = np.random.randint(0, 255, 24).reshape(2, 2, 2, 3)
images.shape

out> (2, 2, 2, 3)

Посмотрите на первое изображение:

plt.imshow(images[1])

enter image description here

Вид в серой шкале:

plt.imshow(to_grayscale(images[1]))

enter image description here

Как преобразовать images в массив серых изображений image_g?Я хотел бы сделать что-то вроде этого:

image_g = np.somefunction(to_grayscale, images)
images_g.shape

out> (2, 2, 2)

, где somefunction является заполнителем для ответа.

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Вы также можете использовать scikit-image

Пример

from scipy import misc
import matplotlib.image as mpimg
from skimage import data
photo_data = misc.imread("./image.jpg")
x,y,z=photo_data.shape ## where z is the RGB dimension
photo_data[:] = photo_data.mean(axis=-1,keepdims=1) 
mpimg.imsave("greyscale.png", photo_data)
0 голосов
/ 14 октября 2018

Я не уверен, что это самый быстрый или самый элегантный способ сделать это вообще, основываясь на этом ответе

images_g = np.array([to_grayscale(images[i]) for i in range(images.shape[0])])
0 голосов
/ 13 октября 2018

Использование PIL

from PIL import Image
img = Image.open('image.png').convert('LA')
img.save('greyscale.png')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...