当我尝试将PNG类型的PIL图像转换为OpenCV图像时,PNG中的透明背景会变成黑色背景。如何在OpenCV图像对象中保留透明背景。
以下是代码片段:
# PIL Image object which holds a transparent background png image.
pil_img = Image.open(ioFile).convert('RGBA')
pil_img.show()
# I use numpy to convert the pil_image into a numpy array
numpy_image = np.array(pil_img)
# I convert to a openCV2 image, notice the COLOR_RGB2BGR which means that
# the color is converted from RGBA to BGR format
opencvImage = cv2.cvtColor(numpy_image, cv2.COLOR_RGBA2BGRA)
#
#(I commented below lines, to show that I tried them but did not work.)
#
# opencvImage = cv2.cvtColor(numpy_image, cv2.IMREAD_UNCHANGED)
# opencvImage = cv2.cvtColor(numpy_image, cv2.COLOR_RGB2BGR)
showImage(opencvImage)
代码的最后一行显示了一个黑色背景的图片。我可能选择了错误的转换方法,找不到合适的方法。
cv2.imshow
显示图像...这个函数会把透明部分也显示成黑色 :) 可以参考这篇帖子。如果你保存图片,它将保持透明。顺便问一下,你需要在 PIL 中使用这张图片吗?也许你可以跳过一些步骤,直接从 OpenCV 中加载它。 - api55cv2.IMREAD_UNCHANGED
。如果它是一个.png文件,也许最好确保它以.png结尾(如果URL没有以.png结尾,请在末尾尝试使用一个虚拟变量,如?dummy=.png
)。 - api55