从简单/普通的背景中提取图像

Posted

技术标签:

【中文标题】从简单/普通的背景中提取图像【英文标题】:Extracting images from a simple/plain background 【发布时间】:2020-04-21 11:54:57 【问题描述】:

给定一个像这样具有纯背景的精灵表:

我想从这个背景中取出每个单独的图像并为其创建一个文件。我环顾四周,找不到有关如何执行此操作的信息 - 我不禁觉得有一些简单的方法。有没有人指点一下?

警告:并非所有精灵表的格式/布局都相同,例如这个:

它的布局略有不同,this one 更奇怪。

所以有些挑战:

    精灵表的背景颜色不同。

    Sprite 表中的 Sprite 大小不同,无法提前指定该大小。

    方法必须泛化(相当好)到数千个精灵表。

感谢任何帮助。

【问题讨论】:

可能重复别人询问如何分解精灵表:***.com/questions/9385900/… 谢谢,看起来这确实分解了一个精灵表,但这更多是关于自动化该过程或自己编写一个方法以便为许多表自动化它。 【参考方案1】:

取自:https://www.reddit.com/r/computervision/comments/ej3wgr/extracting_images_from_a_simpleplain_background/

by /u/tzatz

1) 检测背景颜色(适当采样,例如从图像边缘),一种选择是在哈希表中投票(key = r+"-"+g+"-"+b)

2) 设置蒙版,将蒙版中所有背景像素设置为零,在背景一定颜色距离内,将所有其他蒙版像素设置为1。

3) 可选:腐蚀掩码一次(或两次),然后向后扩张以删除无用的线条。

4) 你现在有一个 0 对 1 的蒙版,对每组 1 进行泛洪填充以确定每个精灵的范围。在进行泛洪填充时将遮罩像素设置为“2”以指示已访问。

5) 在进行泛光填充时,跟踪每个精灵的最小/最大 x/y,在泛光填充结束时,您将拥有可用于裁剪/存储的范围(和蒙版)。

【讨论】:

【参考方案2】:

我知道这违反了 Stackoverlow 提出完整答案的原则,但我建议您搜索 Alvy Ray Smith 和 Jim Blinn 的“Blue Screen Matting”论文。有一个copy available here。

他们已经在图形行业工作了几十年,因此“了解他们的东西”。

【讨论】:

以上是关于从简单/普通的背景中提取图像的主要内容,如果未能解决你的问题,请参考以下文章

从彩色背景中提取黑色对象

从简单的 XML 文件中提取数据

PyTesseract OCR 无法从简单图像中读取数字

从 Rails 应用程序的数据库中提取 CSS 资产(如背景图像)?

Python遥感图像处理应用篇(二十):Python+GDAL 批量提取多波段图像为单波段图像

Python遥感图像处理应用篇(二十):Python+GDAL 批量提取多波段图像为单波段图像