Как изменить размеры np.array для изображений в оттенках серого - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть следующий код для загрузки изображения:

img = imread(os.path.join('./Faces/','10.png')) 
print(img.shape)
img = np.mean(img, axis=2)
img = img.astype(int)
print(img.shape)

Вывод этого кода выглядит следующим образом:

(200, 180, 3)
(200, 180)

Я понимаю, что усредняю ​​RGB слои в градациях серого, но мой входной слой Keras определен с формой (200, 280, 1). Есть ли способ изменить форму? Есть ли даже функциональная разница между матрицей двух форм, как показано выше?

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Вы не должны усреднять каналы. Существует определенный баланс между каналами RGB для преобразования изображения в оттенки серого, и он не всегда удобен для каждого 0,33%. Это то, что:

((0.3*R) + (0.59*G) + (0.11*B))

Вместо усреднения или выполнения вручную, я предлагаю вам использовать:

import cv2 

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Затем добавьте измерение:

img = img[..., np.newaxis]

или

img = np.expand_dims(img, -1)

Функциональное отличие состоит в том, что, очевидно, ваш CNN не будет видеть цвет, если вы превратите его в оттенки серого. Поэтому он не сможет использовать эту информацию для классификации.

1 голос
/ 21 апреля 2020

Вы можете использовать функцию expand_dims в numpy (см. документацию ).

В вашем случае это работает следующим образом:

img = img.astype(int)
print(img.shape)
# Prints (100, 100)

img = np.expand_dims(img, axis=2)
print(img.shape)
# Prints (100, 100, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...