我有一个系统可以从图像中删除白色(给出或采取一些阴影)并用alpha通道替换它。 (图像来自用户手机相机,并尝试删除所选颜色)
这在大多数情况下会留下粗糙的边缘,我想知道是否可以在顶部添加某种类型的抗锯齿。
系统通过接收图像并搜索每个像素数据来工作。如果像素是白色(或接近),它将用alpha颜色替换它。
所以我猜我的问题是,如何让边缘不那么苛刻。感谢。
答案 0 :(得分:0)
抗锯齿不是您想要的。这样可以处理因图像分辨率有限而导致的效果。但是,您的问题与分辨率无关,您仍然可以获得无限分辨率。
您需要做的是找到白色像素,增加像素本身及其周围像素的透明度。
您可以在白色像素的正上方,下方,左侧或右侧包含四个像素,或者选择任何其他形状,例如:位于白色像素周围的给定半径圆内的所有像素。
您还可以选择一个函数来确定透明度在该形状上的分布方式。你可以把所有东西都变成半透明的,或者你可以减少对那个形状边缘的影响(虽然我不认为这是必要的)。
因此,每个像素将从它们周围的几个像素接收透明度。必须根据所有这些贡献计算得到的透明度。简单地将它们相乘可能是不行的,因为你将很难达到alpha = 0。但是,您可以将(255-alpha)解释为透明度的度量,添加所有提供的透明度,然后转换回alpha。类似于max(0,255 - (255-a1)+(255-a2)...)。
很难在原地进行此操作,即仅使用图像副本。您可能需要一个中间“图像”,其中每个像素与周围像素的所有透明度贡献相关联。