我是OpenCV的新手,所以如果我对你很愚蠢,请耐心等待。
我想擦除这些边框,所以我想到边缘检测,如果我可以将这些透明边框转换为白色,这很容易做到。在Docs中,我发现你可以这样做:
img = cv2.imread("./Green/image-000.png", 1)
cv2.imwrite('../image-000.png', img)
这会删除png图像的alpha通道,但会将其变为黑色。 有类似的东西会使边框变白吗? 或者是否有更简单的方法来擦除这些边界? 如果你能帮助我,你会让我很开心!
PS:我使用Python 2.7和OpenCV 3.4
答案 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测试了这段代码,其中颜色通道是黑色的,信息是透明的:
嵌套的bitwise_not
很难看,但却是我找到的唯一方法。