【问题标题】:how to detect blobs and crop them into png files?如何检测 blob 并将它们裁剪为 png 文件?
【发布时间】:2011-06-14 14:34:39
【问题描述】:

我一直在开发一个网络应用程序。我陷入了一个有问题的问题。 我会试着解释我想要做什么。 在这里,您会看到第一个带有绿色形状的大图像。 我想要做的是将这些形状裁剪成不同的 png 文件,并使它们的背景透明,就像大图下方的示例裁剪图像一样。

第一个图像将由用户上传,我想像上面的示例裁剪图像一样裁剪成碎片。可以使用 php 的 GD 库或用 python 或 c# 编写的服务器端软件来完成。但我不知道这个操作叫什么,所以我不知道用谷歌搜索什么信息。这与计算机视觉检测斑点并将它们裁剪成碎片等有关。 任何关键字,链接都会有所帮助。

感谢帮助

【问题讨论】:

  • 期待一些困难的事情:)
  • 没关系 :) 我会努力学习 :)

标签: c# python opencv gd computer-vision


【解决方案1】:

我相信这篇维基百科文章很好地解决了这个问题:http://en.wikipedia.org/wiki/Blob_detection

但不记得有任何现成的解决方案(-:

【讨论】:

    【解决方案2】:

    一个非常简单的方法是使用Flood Fill/Connected Component Labeling。基本上,这只是通过将颜色相同或相似的任何像素分组来使用贪心算法。

    这绝对不是检测斑点的理想方法,而且只会在有限的情况下有效。但是,它更容易理解和编码,并且可能足以满足您的目的。

    【讨论】:

    • 感谢您的帮助 :) 我会尽快开始研究这些文章 :)
    【解决方案3】:

    Opencv 提供了一个名为cv::findContours 的函数来查找图像中的连通分量。如果它总是绿色与白色,你想cv::split图像进入通道,在蓝色或红色通道上使用cv::threshold(白色区域为白色,绿色区域为接近黑色)和THRESH_BINARY_INV (因为您要提取 dark 区域),然后使用 cv::findContours 检测 blob。然后,您可以使用cv::boundingRect 计算边界矩形,创建该大小的新图像,并使用您获得的轮廓作为蒙版来填充新图像。

    注意:这些是 C++ 文档的链接,但这些函数应该在 python 和 C# 包装器中公开 - 后者请参阅 http://www.emgu.com

    【讨论】:

    • 是的,背景总是白色的,但形状不会总是单色的
    • 没关系,然后您将转换为灰度并对该图像进行阈值处理。
    【解决方案4】:

    这实际上取决于您要处理的图像类型。

    正如 Brian 提到的,您可以使用 Connected Component Labeling,它通常应用于二进制图像,其中前景由白色像素表示,背景由黑色像素表示(或相反)。那么问题是如何将原始图像转换为二进制图像。如果所有图像都像您提供的示例,这很简单,可以通过阈值来完成。 OpenCV 提供了有用的方法:

    但是,对于更复杂的图像,所有的赌注都没有了。

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 2013-12-20
      • 1970-01-01
      • 2012-09-11
      • 2017-07-30
      • 2014-01-21
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      相关资源
      最近更新 更多