我正在尝试删除UIImage的背景,最后使用了MagicWand的iOS端口。
通过调用MagickFloodfillPaintImage方法,我能够使用泛洪填充算法成功删除所选像素。然而,现在的挑战是软化填充物去除过程留下的锋利边缘。
我正在使用以下代码删除背景。
PixelIterator* iterator = NULL;
PixelWand** pixels = NULL;
size_t x;
iterator = NewPixelRegionIterator(magick_wand, _touchCoords.x*scale, _touchCoords.y*scale, 1, 1);
pixels = PixelGetNextIteratorRow(iterator,&x);
bc_wand = pixels[0];
channel = ParseChannelOption("rgba");
status = MagickFloodfillPaintImage(magick_wand, channel, fc_wand, _tolerance, bc_wand, _touchCoords.x*scale, _touchCoords.y*scale, MagickFalse);
if (status == MagickFalse) {
ThrowWandException(magick_wand);
}
非常感谢任何帮助!
答案 0 :(得分:0)
听起来你需要MagickFloodfillPaintImage
中的抗锯齿功能。但是MagickFloodfillPaintImage
不支持它。
但幸运的是,您可以使用传统的多重采样技术来模拟它。 这很简单:
质量取决于调整比例。
考虑这个例子(删除白色背景):
原始算法会产生硬边:
通过调整大小,可能会更好: