检测图像中的一团颜色

问题描述 投票:8回答:5

我有一个深度热图的图像,我已经过滤了比图像的前25%更远的任何东西。

它看起来像这样:

图像中有两种颜色,一种是我的手(我脸后面有一部分),另一种是左下角的桌子。如何搜索图像以找到这些斑点?如果可能的话,我希望能够在它们周围画一个矩形。

我也可以这样做(忽略阴影,过滤为黑色或白色):

c# image-processing nui
5个回答
2
投票

对于你需要的东西来说可能有些过分,但是对于OpenCV库来说,C#有一个很棒的包装器。

我已成功在C ++中使用OpenCV进行blob检测,因此您可能会发现它对您尝试执行的操作很有用。

http://www.emgu.com/wiki/index.php/Main_Page

和OpenCV上的维基页面:

http://en.wikipedia.org/wiki/OpenCV

编辑添加:这是C#中Emgu的blob检测库。甚至还有一些很好的功能,通过下降区域排序blob(用于滤除噪声)。

http://www.emgu.com/forum/viewtopic.php?f=3&t=205

再次编辑:

如果Emgu太重,Aforge.NET还包括一些blob检测方法

http://www.aforgenet.com/framework/


3
投票

选择一个随机像素作为种子像素。这成为区域A.反复扩展A直到A没有变大。那是你的地区。

扩展A的方法是通过查找A的相邻像素,使得它们具有与A中的至少一个相邻像素相似的颜色。

“相似的颜色”对你来说意味着什么变化。如果你可以准确地制作两种颜色,正如你在另一个答案中所说,那么“相似”就是“相等”。否则,“相似”将意味着具有RGB值的颜色或其中两种颜色的每个分量在彼此的少量内的颜色(即255,128,128类似于252,125,130)。

您还可以限制所选像素,使它们必须与种子像素相似,但是当人类拾取种子时,这种方法效果更好。 (我相信这就是Photoshop中的功能。)

这可能比边缘检测更好,因为您可以处理渐变而不过滤掉它们,并且您不需要将检测到的结果边缘处理成相干区域。它的缺点是渐变可以从黑色一直到白色,并且它将注册为相同的区域,但这可能是你想要的。此外,您必须小心实现,否则它将太慢。


2
投票

如果图像实际上只有两种或更多种不同的颜色(颜色之间的模糊很少),那么edge detection算法很容易。


1
投票

您可以使用类似此问题的代码示例:find a color in an image in c#

它可以帮助您找到图像中特定颜色的x / y。然后你可以使用min x / max x和min y / max y来绘制矩形。


1
投票

通过C#基于对象颜色从图像中检测对象。

要根据颜色检测对象,可以使用简单的算法。你必须选择一种过滤方法。步骤通常是:

  1. 拍下照片
  2. 应用你的过滤
  3. 应用greyscalling
  4. 减去背景并获取对象
  5. 找到所有对象的位置
  6. 标记对象

首先你必须选择一种过滤方法,为C#提供了许多过滤方法。主要是我更喜欢AForge过滤器,为此他们几乎没有过滤器:

  1. ColorFiltering
  2. ChannelFiltering
  3. HSLFiltering
  4. YCbCrFiltering
  5. EuclideanColorFiltering

我最喜欢的是EuclideanColorFiltering。它简单易行。有关其他过滤器的信息,您可以访问以下链接。您必须下载AForge dll才能在代码中应用这些内容。有关确切步骤的更多信息,请访问:Link

© www.soinside.com 2019 - 2024. All rights reserved.