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

Graphics 从简单/普通背景中提取图像,graphics,pygame,computer-vision,sprite,sprite-sheet,Graphics,Pygame,Computer Vision,Sprite,Sprite Sheet,给定一张具有如下简单背景的精灵图纸: 我想把每个单独的图像从这个背景下,并为它创建一个文件。我环顾四周,很难找到如何做到这一点的信息——我忍不住觉得有一些简单的方法。有人有什么建议吗 警告:并非所有的精灵图纸都具有相同的格式/布局,例如: 它的布局稍有不同,甚至更奇怪 因此,我们面临一些挑战: 雪碧片的背景颜色各不相同 精灵工作表中的精灵大小不同,不能提前指定该大小 该方法必须(相当好地)推广到数千张sprite表 感谢您的帮助。摘自: 作者:u/tzatza 1) 检测背景色(适当采样,比

给定一张具有如下简单背景的精灵图纸:

我想把每个单独的图像从这个背景下,并为它创建一个文件。我环顾四周,很难找到如何做到这一点的信息——我忍不住觉得有一些简单的方法。有人有什么建议吗

警告:并非所有的精灵图纸都具有相同的格式/布局,例如:

它的布局稍有不同,甚至更奇怪

因此,我们面临一些挑战:

  • 雪碧片的背景颜色各不相同

  • 精灵工作表中的精灵大小不同,不能提前指定该大小

  • 该方法必须(相当好地)推广到数千张sprite表

  • 感谢您的帮助。

    摘自:

    作者:u/tzatza

    1) 检测背景色(适当采样,比如从图像边缘),一个选项是在哈希表中使用投票(key=r+“-”+g+“-”+b)

    2) 设置一个遮罩,将遮罩中背景颜色距离内的所有背景像素设置为零,将所有其他遮罩像素设置为1

    3) 可选:腐蚀面膜一次(或两次),然后再扩张,去除无用的线条

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

    5) 在整体填充时,跟踪每个精灵的最小/最大x/y,在整体填充结束时,可以使用范围(和遮罩)进行裁剪/存储。

    取自:

    作者:u/tzatza

    1) 检测背景色(适当采样,比如从图像边缘),一个选项是在哈希表中使用投票(key=r+“-”+g+“-”+b)

    2) 设置一个遮罩,将遮罩中背景颜色距离内的所有背景像素设置为零,将所有其他遮罩像素设置为1

    3) 可选:腐蚀面膜一次(或两次),然后再扩张,去除无用的线条

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


    5) 在填充时,跟踪每个精灵的最小/最大x/y,在填充结束时,您可以使用范围(和遮罩)进行裁剪/存储。

    我知道这违背了叠加整个答案的原则,但我建议您搜索Alvy Ray Smith&Jim Blinn的“蓝屏Matting”纸。有一个


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

    我知道这违背了下面给出完整答案的原则,但我建议您搜索Alvy Ray Smith&Jim Blinn的“蓝屏床垫”纸。有一个


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

    可能重复了其他人询问如何分解精灵表的问题:谢谢,看起来这确实分解了一张sprite工作表,但这更多的是关于自动化该过程或自己编写一个方法,以便对许多工作表进行自动化。其他人询问如何分解sprite工作表的可能重复:谢谢,看起来这确实分解了一个sprite工作表,但这更多的是关于自动化该过程或自己编写一个方法,以便对许多工作表进行自动化。