#python #arrays #numpy #alpha
#python #массивы #numpy #альфа
Вопрос:
Я следую руководству по распознаванию изображений https://www.youtube.com/watch?v=ry9AzwTMwJQamp;list=PLQVvvaa0QuDffXBfcH9ZJuvctJV3OtB8Aamp;index=9
Но созданный код предназначен для сравнения изображений, которые имеют альфа-значение, а изображение, которое я хочу протестировать, не имеет альфа-значения.
Я много чего перепробовал, вот как выглядит моя последняя попытка :
from PIL import Image
import numpy as np
i = Image.open('images/test.png')
iar = np.array(i)
def addAlpha(iar):
b = []
for eachRow in iar:
b = [[255]]
for eachRow in iar:
eachRow = np.append(eachRow, b, axis= 1)
print(eachRow)
print (iar)
return iar
iar = addAlpha(iar)
Поэтому, когда я печатаю eachRow, он выглядит так, как я хочу, но когда я печатаю iar, ничего не изменилось, по-прежнему остаются только значения RGB.
Я уже благодарю вас за любую помощь и приношу извинения за мой плохой английский!
Комментарии:
1. Что
iar
такое форма? (Проверкаiar.shape
)2. Печать iar.shape дает: (8, 8, 3)
Ответ №1:
Учитывая, что iar
его форма равна 8x8x3, мы можем сказать, что работаем с изображением размером 8×8, где каждый пиксель имеет три канала (r, g и b). Мы хотели бы добавить четвертый канал для альфа, который увеличит нашу форму до 8x8x4.
Сначала мы создаем массив, содержащий все наши альфа-значения:
alpha = 255 * np.ones((8, 8, 1))
Здесь мы создаем массив единиц размером 8×8 (с дополнительным измерением, чтобы его оси совпадали iar
) и умножаем его на 255
, чтобы получить желаемое значение.
Теперь мы можем просто объединить два массива:
iar = np.concatenate([iar, alpha], axis=2)
Мы объединяем вдоль оси 2, что, по сути, позволяет нам «вставить» alpha
массив в конец iar
, добавив наш четвертый канал к изображению.
Вот оно в действии.
Комментарии:
1. Спасибо за ваш ответ, он работал хорошо, но добавил некоторые «.» перед моими значениями. Я нашел решение, используя это :
iar = np.concatenate((iar, np.full( (8, 8, 1), 255, dtype= int)), axis = 2)