OpenCV - 将PNG透明部分变为白色

时间:2018-02-15 21:37:12

标签: python image opencv png

我是OpenCV的新手,所以如果我对你很愚蠢,请耐心等待。

我有一组图像,左侧和右侧都有透明边框,如下所示: enter image description here

我想擦除这些边框,所以我想到边缘检测,如果我可以将这些透明边框转换为白色,这很容易做到。在Docs中,我发现你可以这样做:

img = cv2.imread("./Green/image-000.png", 1)
cv2.imwrite('../image-000.png', img)

这会删除png图像的alpha通道,但会将其变为黑色。 有类似的东西会使边框变白吗? 或者是否有更简单的方法来擦除这些边界? 如果你能帮助我,你会让我很开心!

PS:我使用Python 2.7和OpenCV 3.4

1 个答案:

答案 0 :(得分:4)

您应该使用-1 IMREAD_UNCHANGED加载图片,即

img = cv2.imread("./Green/imgage-000.png", cv2.IMREAD_UNCHANGED)

然后,您的图片将有4个频道(BGRA),您可以使用Alpha通道掩码将相应的部分变为白色:

alpha_channel = img[:, :, 3]
_, mask = cv.threshold(alpha_channel, 254, 255, cv.THRESH_BINARY)  # binarize mask
color = img[:, :, :3]
new_img = cv.bitwise_not(cv.bitwise_not(color, mask=mask))

我用透明的PNG测试了这段代码,其中颜色通道是黑色的,信息是透明的:

input image with gradual transparency output image with binary pixels

嵌套的bitwise_not很难看,但却是我找到的唯一方法。