使用 OpenCV 按颜色对像素进行排名

Sta*_*yon 5 c++ opencv

我开始了一个关于检测的项目。我的想法是对图像(Mat)的每个像素进行排名。然后,我将能够退出哪种颜色占主导地位。

困难在于颜色不是唯一的。例如,绿色是 rgb(0, 255, 0),但也几乎是 rgb(10, 240, 20)。

我排名的目标是退出颜色几乎相同的像素。然后,通过倾注,我想我可以找到我的物体。

所以,我的问题是:这是一种按颜色对像素进行排名的方法吗?

提前非常感谢您的回答。

23p*_*rth 3

正如您所说的颜色像素没有直接的排名方法。但是,您可以找到最占主导地位的近似值。

有几种方法可以做到这一点:

  1. 您可以计算每个颜色通道的直方图 -将其拆分为 R、G、B 并计算直方图。然后您可以看到结果图的峰值在哪里 - 例如
  2. 如果您对图像上的像素进行 k 均值聚类 - 换句话说,将每个像素表示为具有坐标 (R、G、B) 的 3D 点。然后您可以将像素分割成 k 个最常出现的颜色。
  3. 如果将图像大小调整为 1x1 像素图像,您将找到所有像素值的平均值。如果存在主色,其中大多数像素都非常接近,那么它将给出很好的近似值。

然而,所有这些都是近似值。您最好的选择是使用 k 均值并找到具有最多元素或最密集的簇。

如果您正在寻找定位具有特定颜色的对象的方法,您可以使用最大似然估计。像这样的东西,用于对卫星图像中的不同物体进行分类,例如草、汽车、建筑物和路面。您可以将其与单一颜色一起使用,并根据该像素属于您的对象的可能性(概率百分比)来获取对象所在位置的热图。