在密集地形精灵表中自动检测单个精灵边界

2024-06-16 09:55:48 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:我使用机器学习和tensorflow卷积网络来解决这个问题。看起来工作很得体。请参阅https://github.com/emnh/opengameart/blob/master/src/train.py了解解决方案的正在进行的工作

我的目标是自动分割所有的https://opengameart.org/精灵图纸,比如说大约275000张图像,其中一些是精灵图纸,一些不是。我想:

  • 1:回答问题:这是雪碧床单吗
  • 2:自动检测包含由背景或透明度分隔的精灵的精灵图纸的边界。这很容易,已经完成了
  • 3:自动检测密集地形精灵片的边界。这似乎更难。我已经尝试了一段时间,取得了一些成功。我正在使用Python

这个问题类似于Sprite Sheet Detect Individual Sprite Bounds Automatically,但不是被透明包围的精灵可以被洪水填充,我问的是稠密的精灵表,那里没有或几乎没有透明度,大部分情况下整个画面都是用地形瓷砖填充的

我目前的代码是https://github.com/emnh/opengameart/blob/master/src/00-split-sheet.py。在该文件中,您将发现这些图纸的标准泛光填充内部透明度与“splitSheet”方法类似,而“detectSize3X”和“detectSize3Y”方法试图使用opencv和水平线和垂直线检测来检测精灵边界,因此它们与问题最相关

例如,在https://opengameart.org/content/a-lot-of-metroid-like-blocks-16x16上,脚本按顺序返回以下分数,分数越高表示精灵的大小越大。所以我很接近,但这一款没有雪茄(它在某些床单上有效,而不是在所有床单上)。16应在x和y两个方面得分最高:

Mostly Dense Tile Sheet

x 16 0.5371577574967406
x 32 0.5552865213882162
x 96 0.5706214689265536
x 64 0.594632768361582
x 48 0.6067796610169491

y 4 0.5123184507799893
y 128 0.5524475524475524
y 16 0.5870012340600576
y 32 0.6037296037296037
y 64 0.6349650349650349

我使用的方法基本上是https://docs.opencv.org/3.4/dd/dd7/tutorial_morph_lines_detection.html,然后对行和列求和以检测这些行,检查哪些数字划分图像的宽度和高度,然后根据它所触及的列/行的平均和给每个数字打分。例如,对于16x图像宽度64,我将cols 16 32 48 64相加并除以4


Tags: 方法httpsorg图像githubmastercomblob