Agradeceríamos tu ayuda para difundir nuestras secciones con relación a las ciencias informáticas.
Solución:
Con opencv3, esto debería funcionar:
Pitón
# First create the image with alpha channel
rgba = cv2.cvtColor(rgb_data, cv2.COLOR_RGB2RGBA)
# Then assign the mask to the last channel of the image
rgba[:, :, 3] = alpha_data
C++
# First create the image with alpha channel
cv::cvtColor(rgb_data, rgba , cv::COLOR_RGB2RGBA);
# Split the image for access to alpha channel
std::vectorchannels(4);
cv::split(rgba, channels);
# Assign the mask to the last channel of the image
channels[3] = alpha_data;
# Finally concat channels for rgba image
cv::merge(channels, 4, rgba);
Puedes utilizar cv2.merge()
para agregar el canal alfa a la imagen RGB dada, pero primero debe dividir la imagen RGB para R, G and B
canales, según la documentación:
Python: cv2.merge(mv[, dst])
- mv – entrada array o vector de matrices a fusionar; todas las matrices en mv deben tener el mismo tamaño y la misma profundidad.
Y esto se puede hacer como:
b_channel, g_channel, r_channel = cv2.split(img)
alpha_channel = np.ones(b_channel.shape, dtype=b_channel.dtype) * 50 #creating a dummy alpha channel image.
img_BGRA = cv2.merge((b_channel, g_channel, r_channel, alpha_channel))
Aquí hay otro ejemplo simple usando Grabcut, ayuda a obtener el orden correcto de los canales al guardar la imagen en el disco vs. pyplot
.
from matplotlib import pyplot as plt
import numpy as np
import cv2
img = cv2.imread('image.jpg')
mask = np.zeros(img.shape[:2], np.uint8)
bgdModel = np.zeros((1,65), np.float64)
fgdModel = np.zeros((1,65), np.float64)
rect = (50, 50, 450, 290)
# Grabcut
cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)
r_channel, g_channel, b_channel = cv2.split(img)
a_channel = np.where((mask==2)|(mask==0), 0, 255).astype('uint8')
img_RGBA = cv2.merge((r_channel, g_channel, b_channel, a_channel))
cv2.imwrite("test.png", img_RGBA)
# Now for plot correct colors :
img_BGRA = cv2.merge((b_channel, g_channel, r_channel, a_channel))
plt.imshow(img_BGRA), plt.colorbar(),plt.show()
Recuerda mostrar esta sección si te fue útil.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)