【问题标题】:Image bounding boxes from sprite sheet来自精灵表的图像边界框
【发布时间】:2018-11-18 06:42:08
【问题描述】:

我有一个包含一组图标的精灵表,如下所示:

我想获得其中所有图标的bounding box(像素精度),在某些情况下,如列表、网格必须被视为一个图标。任何想法都非常受欢迎。

【问题讨论】:

  • 欢迎来到 StackOverflow。我们可以帮助您解决编程问题。但是,我们不会为您完成您的工作。请表现出一些努力:你做了什么研究?你已经尝试过什么?
  • 亲爱的 JHBonarius,远离我要求人们为我做这项工作,我已经用谷歌搜索了它并作为最后的手段来到这里(可能高估了 stackoverflow 的善意)。
  • 好吧,你可以做一些假设: - 边界框是矩形的(甚至是正方形?), - 边界框有最小尺寸, - (看起来)边界框不重叠。您可以从检测所有对象部分开始,然后确定哪些部分属于一起。

标签: c++ qt opencv image-segmentation


【解决方案1】:

我认为您的问题的主要问题是某些图标包含不相交的部分。 如果所有图标都在一个部分,您可以在图像中找到“连接的组件”(白色像素组)并将它们隔离。

我不知道您在图像处理方面的水平,但为了连接一个图标的各个部分,我可能会使用膨胀,这是一种扩展(在约束下)图像中最大强度区域的形态学方法。

如果您需要任何澄清,请告诉我!

【讨论】:

  • 好主意,但它会因为精灵图中的图标没有适当地相互间隔而产生问题。十字架和心形看起来至少与扬声器图标的部分一样接近。
  • 没错,这就是我提出扩张的原因:您可以选择一个结构元素,使扩张将同一个图标的各个部分连接在一起,而不是将图标连接在一起。我没有检查,但它可能是可能的。问题是我们不知道该算法是否应该适用于这些图标的任何配置,或者特别适用于这种配置。
  • 谢谢大家。 @CsuGouv,我在毕业时(16 年)参加了一些图像处理课程,所以我在这方面的知识相当.. 丢失了。
  • 完全没有问题,网上有很多关于它的课程。如果你想实现这个想法,你应该搜索形态过滤,它是一组要在位图上执行的“基本”操作。老实说,我无法确保这对您的问题有效,但这就是我尝试解决的方法
  • 已经非常感谢您的帮助,感谢您的提示和您的好意。
【解决方案2】:

一般来说,这是不可能的:只有人类有足够的上下文来确定哪些不相交的部分属于一起。您可以使用各种方法来近似它,但这是一个失败的原因 - 恕我直言,完全没有必要。想象一下为这个功能写一个测试——这是不可能的,它需要一个人参与,因为任何特定图标表的结果都不能概括。知道该算法适用于某些工作表并不能告诉您它是否适用于您对先验一无所知的其他工作表。

手动为每个精灵着色以使其具有与其邻居不同的颜色会更简单。然后贪心算法可以轻松找到边界框,而无需进行任何近似。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多