OpenCV:如何加载4个通道的png图像?

我一直试图加载具有透明度通道(RGB和Alph)的.png文件而没有运气。 似乎openCV剥离了图像中的第4个通道。 是否有任何方法使用包括alpha通道在内的完整4个通道加载图像,即使我必须修改OpenCV源代码并重建它

如果您使用的是OpenCV 2或OpenCV 3,则应使用IMREAD_ *标志(如此处所述)。

C ++

using namespace cv; Mat image = imread("image.png", IMREAD_UNCHANGED); 

python

 import cv2 im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED) 

根据文档 ,OpenCV支持PNG上的alpha通道。

只需使用CV_LOAD_IMAGE_UNCHANGED作为标志调用imread函数,如下所示:

 cvLoadImage("file.png", CV_LOAD_IMAGE_UNCHANGED) 

读取透明PNG的正确方法是使用第4个通道作为Alpha通道。 大多数情况下,人们想要一个白色背景,如果是这种情况,那么下面的代码可以用于alpha合成。

 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) 

关于此的详细博客在这里 。

显然,OpenCV仍然不支持带Alpha通道的PNG。

有一些黑客可以绕过这个。