Как добавить альфа-значение к каждому пикселю массива Numpy?

#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)