如何在Java中以编程方式删除图像的背景?[关闭]

3z6pesqy  于 4个月前  发布在  Java
关注(0)|答案(1)|浏览(38)

已关闭。此问题需要更多focused。目前不接受回答。
**要改进此问题吗?**更新此问题,使其仅针对editing this post的一个问题。

3天前关闭。
截至3天前,社区正在审查是否重新讨论这个问题。
Improve this question
使用bufferedImage或其他方法是否有一个快速的方法来做到这一点?
目前我的做法:
所有的图像都以白色为背景,所以左上角的像素总是白色。

  • 从左上角的像素开始,使其透明。
  • 从这个像素,看看是否有任何边界像素是白色,如果有,使其透明。对于每个边界像素是白色,检查像素边界像素,并重复所有连接的像素。

这对我来说似乎还可以。但我想知道是否有更好的方法来做到这一点?

oipij1gg

oipij1gg1#

但我想知道是否有更好的方法来做到这一点?
AFAIK,不。(事实上,我怀疑,除了你的一般方法之外,没有其他选择。)
但是,您的 “repeat for all connected pixels” 并没有指定如何执行此操作。显而易见的替代方案是:

  • 递归深度优先-这可能是一个坏主意,因为存在溢出调用堆栈的风险。
  • 宽度优先使用一个队列的像素位置为白色像素尚未处理。这将处理的像素在一个波,最大队列长度将是最大波“宽度”。

可能还有其他策略。
这个问题类似于泛洪填充,泛洪填充算法可以用来解决这个问题。看看Best way to fill shapes in Java (no recursion)的例子。

相关问题