Как преобразовать двоичное изображение в изображение rgba с прозрачным фоном в opencv - PullRequest
0 голосов
/ 06 августа 2020

Супер простой вопрос, у меня есть одноканальное изображение, состоящее из 0 и 255, и я хотел бы преобразовать его в 4-канальное изображение [0,0,0,0] и [255,255,255,255] наиболее эффективным способом. . cv2.COLOR_GRAY2RGBA приводит к тому, что все альфа-канал имеет значение 255, а np.where () кажется мне черным магом c, поэтому любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 06 августа 2020

Однострочное решение с использованием функции cv2.merge.

Пусть ваше входное изображение будет «img», которое имеет 1 канал. Чтобы преобразовать его в 4-канальный, сделайте следующее:

img = cv2.merge((img.copy(), img.copy(), img.copy(), img.copy()))

Теперь «img» будет содержать 4 канала, и все каналы будут иметь одинаковые значения wrt.

0 голосов
/ 06 августа 2020

Просто сложите 4 копии вашего одноканального изображения с np.dstack():

RGBA = np.dstack((im,im,im,im))            # or more tersely RGBA = np.dstack(([im]*4))

Пример :

import numpy as np

# Make image
im = np.array([0,255,255,0,0], dtype=np.uint8)

Посмотрите на это:

array([  0, 255, 255,   0,   0], dtype=uint8)

Сложите его по глубине с помощью np.dstack():

RGBA = np.dstack((im,im,im,im))

Посмотрите на это:

array([[[  0,   0,   0,   0],
        [255, 255, 255, 255],
        [255, 255, 255, 255],
        [  0,   0,   0,   0],
        [  0,   0,   0,   0]]], dtype=uint8)
0 голосов
/ 06 августа 2020

Просто создайте массив numpy с большим количеством слоев, а затем измените значения этого массива на значения вашего изображения.

img = cv2.imread('img.jpg')
h, w, d = img.shape #(217, 232, 3)

nr_of_new_layers = 1
alpha_img = np.zeros((h, w, d+nr_of_new_layers))

alpha_img[:,:,:3] = img  #alpha_img shape = (217, 232, 4)

Или, если нет третьего измерения, вы можете сделать

d = 0
img = cv2.imread('img.jpg', d)
h, w = img.shape #(217, 232)

nr_of_new_layers = 4
alpha_img = np.zeros((h, w, d+nr_of_new_layers))

alpha_img[:,:,d] = img  #alpha_img shape = (217, 232, 4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...