【发布时间】:2018-07-10 10:05:38
【问题描述】:
我有一组透明的 PNG 图像,边缘有黑色伪影,如下所示:
我正在寻找一种自动清理边框的方法。我尝试简单地屏蔽掉某个 RGB 值下的像素,但图像本身也可能包含黑色像素,然后这些像素会被过滤掉。我正在使用 Python3 和 opencv3/PIL。
我的问题是:如何去除黑色边缘,同时保留不属于边缘的黑色像素?
编辑:正如 usr2564301 在下面指出的那样,很少(如果有的话)边缘像素是纯黑色的。我仍然需要删除它们,所以我想使用一些阈值并删除与透明像素相邻的像素并且是:
- 暗于阈值、或
- 比任何相邻的非透明像素至少暗阈值。
【问题讨论】:
-
边缘不是全黑的,只有一些像素。 非常,非常很少,实际上。点击这里和那里我什至找不到一个。如果边框上的像素不是黑色、深色甚至中等,但仍“比随机相邻像素更暗”,您希望发生什么?
-
好收获!在这种情况下,我想考虑一些阈值并删除以下像素是有意义的:1)与透明像素相邻,2)至少
threshold比周围的任何非透明像素暗,或至少threshold比纯黑色更轻。 -
一般情况下,二进制模式下是无法得到真正的斜线的。
-
使用透明通道查找所有对象像素(从中创建蒙版)。然后侵蚀该遮罩或移除所有在边界处颜色发生剧烈变化且像素值接近黑色的遮罩点。
-
如何找到颜色变化?这是我无法找到关于如何做的解释的一件事,并且迭代所有像素(然后检查四个或更多邻居)似乎没有必要。
标签: python python-3.x opencv image-processing pillow