OpenCV-将PNG的透明部分变成白色

Ine*_*pid 1 python png opencv image

我是OpenCV的新手,所以如果我的提问对您来说很愚蠢,请多多包涵。

我有一组图像,它们的左右两侧都有透明边框,如下图所示: 在此处输入图片说明

我想删除这些边界,所以我想到了边缘检测,如果我可以将这些透明边界转换为白色,这将很容易做到。在文档中,我发现您可以执行以下操作:

img = cv2.imread("./Green/image-000.png", 1)
cv2.imwrite('../image-000.png', img)
Run Code Online (Sandbox Code Playgroud)

这会删除png图像的Alpha通道,但会将其变为黑色。是否有类似的东西使边界变白?还是有消除这些边界的更简单方法?如果您能帮助我,您会让我真的很高兴!

PS:我使用Python 2.7和OpenCV 3.4

Qua*_*ang 6

您应该加载与图像-1,这就是IMREAD_UNCHANGED,即

img = cv2.imread("./Green/imgage-000.png", cv2.IMREAD_UNCHANGED)
Run Code Online (Sandbox Code Playgroud)

然后,您的图像将具有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))
Run Code Online (Sandbox Code Playgroud)

我用透明的PNG测试了此代码,其中的颜色通道为黑色,并且信息位于透明度中:

具有渐进透明度的输入图像 输出具有二进制像素的图像

嵌套bitwise_not很丑陋,但这是我发现使其起作用的唯一方法。