检测图像中的一团颜色
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测图像中的一团颜色相关的知识,希望对你有一定的参考价值。
我有一个深度热图的图像,我已经过滤了比图像的前25%更远的任何东西。
它看起来像这样:
图像中有两种颜色,一种是我的手(我脸后面有一部分),另一种是左下角的桌子。如何搜索图像以找到这些斑点?如果可能的话,我希望能够在它们周围画一个矩形。
我也可以这样做(忽略阴影,过滤为黑色或白色):
对于你需要的东西来说可能有些过分,但是对于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/
选择一个随机像素作为种子像素。这成为区域A.反复扩展A直到A没有变大。那是你的地区。
扩展A的方法是通过查找A的相邻像素,使得它们具有与A中的至少一个相邻像素相似的颜色。
“相似的颜色”对你来说意味着什么变化。如果你可以准确地制作两种颜色,正如你在另一个答案中所说,那么“相似”就是“相等”。否则,“相似”将意味着具有RGB值的颜色或其中两种颜色的每个分量在彼此的少量内的颜色(即255,128,128类似于252,125,130)。
您还可以限制所选像素,使它们必须与种子像素相似,但是当人类拾取种子时,这种方法效果更好。 (我相信这就是Photoshop中的功能。)
这可能比边缘检测更好,因为您可以处理渐变而不过滤掉它们,并且您不需要将检测到的结果边缘处理成相干区域。它的缺点是渐变可以从黑色一直到白色,并且它将注册为相同的区域,但这可能是你想要的。此外,您必须小心实现,否则它将太慢。
如果图像实际上只有两种或更多种不同的颜色(颜色之间的模糊很少),那么edge detection算法很容易。
您可以使用类似此问题的代码示例:find a color in an image in c#
它可以帮助您找到图像中特定颜色的x / y。然后你可以使用min x / max x和min y / max y来绘制矩形。
通过C#基于对象颜色从图像中检测对象。
要根据颜色检测对象,可以使用简单的算法。你必须选择一种过滤方法。步骤通常是:
- 拍下照片
- 应用你的过滤
- 应用greyscalling
- 减去背景并获取对象
- 找到所有对象的位置
- 标记对象
首先你必须选择一种过滤方法,为C#提供了许多过滤方法。主要是我更喜欢AForge过滤器,为此他们几乎没有过滤器:
- ColorFiltering
- ChannelFiltering
- HSLFiltering
- YCbCrFiltering
- EuclideanColorFiltering
我最喜欢的是EuclideanColorFiltering。它简单易行。有关其他过滤器的信息,您可以访问以下链接。您必须下载AForge dll才能在代码中应用这些内容。有关确切步骤的更多信息,请访问:Link
以上是关于检测图像中的一团颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何定义阈值以仅检测图像中的绿色对象:Opencv [重复]