He intentado cargar archivos .png con canal de transparencia (RGB y Alph) sin suerte. Parece que openCV elimina el cuarto canal de la imagen. ¿Hay algún método para cargar la imagen con los 4 canales completos incluyendo el canal alfa incluso si tuve que modificar el código fuente de OpenCV y reconstruirloOpenCV: cómo cargar imágenes png con 4 canales?
Respuesta
Aparentemente, OpenCV aún no admite PNG con canal Alpha.
Hay hacks to bypass esto.
De acuerdo con documentation, OpenCV admite canal alfa en PNG.
Sólo tiene que llamar a la función imread usando CV_LOAD_IMAGE_UNCHANGED como banderas de este tipo:
cvLoadImage("file.png", CV_LOAD_IMAGE_UNCHANGED)
De acuerdo con el enlace en esta respuesta [Reading and Writing Images and Video] (http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html), solo pon un número negativo como flag. No se menciona 'CV_LOAD_IMAGE_UNCHANGED' pero de hecho se define en'/usr/include/opencv2/highgui/highgui_c.h' y funciona en el paquete OpenCV de Ubuntu 14.04. –
Si está usando OpenCV OpenCV 2 o 3 usted debe utilizar IMREAD_ * banderas (como se mencionó al here).
C++
using namespace cv;
Mat image = imread("image.png", IMREAD_UNCHANGED);
Python
import cv2
im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED)
Extraño que [Leer y escribir imágenes y videos] (http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html) no menciona esas constantes con nombre. –
Probablemente lo obtuve leyendo el código fuente :) –
La forma correcta de leer un PNG transparente es usar el cuarto canal como canal alfa. La mayoría de las veces uno quiere un fondo blanco, si ese es el caso, entonces el código siguiente puede usarse para la composición alfa.
def read_transparent_png(filename):
image_4channel = cv2.imread(filename, cv2.IMREAD_UNCHANGED)
alpha_channel = image_4channel[:,:,3]
rgb_channels = image_4channel[:,:,:3]
# White Background Image
white_background_image = np.ones_like(rgb_channels, dtype=np.uint8) * 255
# Alpha factor
alpha_factor = alpha_channel[:,:,np.newaxis].astype(np.float32)/255.0
alpha_factor = np.concatenate((alpha_factor,alpha_factor,alpha_factor), axis=2)
# Transparent Image Rendered on White Background
base = rgb_channels.astype(np.float32) * alpha_factor
white = white_background_image.astype(np.float32) * (1 - alpha_factor)
final_image = base + white
return final_image.astype(np.uint8)
Un blog detallado sobre esto está aquí here.
- 1. Cómo cargar imágenes .png, .jpeg usando MFC?
- 2. OpenCV 2.4 Jpeg a PNG con canal alfa
- 3. imágenes Optimizar .png con PIL
- 4. Problema con imágenes PNG en C#
- 5. Combinación de dos imágenes con OpenCV
- 6. Cómo leer imágenes PNG en NSImage
- 7. Transformación de imágenes en OpenCV
- 8. Combina dos imágenes transparentes PNG
- 9. Cómo curar canales WCF con fallas?
- 10. Gran secuencia de imágenes JPEG/PNG Looping
- 11. Cargar imágenes desde NSURL asincrónico con RestKit
- 12. Cargar y almacenar imágenes
- 13. Forma correcta de cerrar WCF 4 canales efectivamente
- 14. Fusionando imágenes png en un archivo pdf
- 15. Cargar un recurso png en un CBitMap
- 16. Transcodificación de imágenes (JPEG a PNG) con Java
- 17. Fusiona dos imágenes PNG con la biblioteca PHP GD
- 18. Fusionar dos imágenes PNG con transparencia y mantener la transparencia
- 19. ¿Son las imágenes png compatibles con varios navegadores?
- 20. mostrar dos imágenes png simultáneamente usando pylab
- 21. Transparencia alfa en imágenes indexadas png
- 22. Cómo cargar un ImageView desde un archivo png?
- 23. Cómo detectar imágenes dañadas (PNG, JPG) en Java
- 24. ¿Cómo pongo imágenes GIF/PNG/... en un BitBtn en Delphi?
- 25. Detección de rostros con OpenCV para imágenes no frontales
- 26. Transparencia en PNG con reportlab 2.3
- 27. OpenCV - Intersección entre dos imágenes binarias
- 28. Costura de 2 imágenes en opencv
- 29. ¿Cómo puedo leer/cargar imágenes en C++?
- 30. Uso de imágenes PNG en sitios web
@karlphilip: esto ya no es cierto. Tal vez eliminar/editar tu respuesta. Véase, por ejemplo, aquí: https://stackoverflow.com/questions/23562207/image-change-the-shape-when-displaying#23562497 –