从透明图像中删除黑边伪影

时间:2018-01-31 10:21:47

标签: python python-3.x opencv image-processing pillow

我有一组透明的PNG图像,边缘有黑色瑕疵,如下所示:

Example image

我正在寻找一种自动清理边框的方法。我尝试简单地屏蔽某个RGB值下的像素,但图像本身也可以包含黑色像素,然后将其过滤掉。我使用的是Python3和opencv3 / PIL。

我的问题是:如何摆脱黑边,同时保留不属于边缘的黑色像素?

编辑:正如usr2564301在下面指出的那样,很少(如果有的话)边缘像素是纯黑色。我仍然需要删除它们,所以我想要使用一些阈值并删除与透明像素相邻的像素,并且是:

  • 阈值
  • 更暗
  • 至少阈值比任何相邻的非透明像素暗。

2 个答案:

答案 0 :(得分:2)

尝试使用Alpha通道并将其蚀刻几个像素。我用 ImageMagick 来说明这项技术,因为这样更容易,但你可以用 OpenCV 做同样的事情:

convert pinkboythingwithcathead.png \( +clone -alpha extract -morphology erode disk:2 \) -compose copy-alpha -composite result.png

enter image description here

答案 1 :(得分:2)

您可以按如下方式对ImageMagick中Alpha通道的边缘进行抗锯齿处理:

输入:

enter image description here

convert image.png -channel a -blur 0x2 -level 50x100% +channel result.png

enter image description here

如果较薄的黑色边框,则使用小于2的值调整2;如果使用更宽的黑色边框,则使用大于2的值。