2

如果它们相等或不相等,我想与填充颜色的组件进行比较我执行以下算法,我对 rgb 进行平均如下

                double avg1 =(comp[0].Red+comp[0].Blue+comp[0].Green)/3;
                double avg2 =(comp[1].Red+comp[1].Blue+comp[1].Green)/3;

然后将它们进行如下比较

                      double ratio  = avg1/avg2 ;
                      if(ratio > 0.8 && ratio < 1.2){} //then they are supposed to be equal

但这种方式根本不准确

搜索后我发现最好的方法是将图像转换为 HSL 空间并进行比较,但我不知道如何比较 2 种颜色?!这里

换句话说,将图像转换为 HSL 空间后,我该怎么办?!

请帮忙 !!

修改问题以获得更多说明,我的意思是使用分量(点序列),所以在平均步骤中,实际上我重新访问计算每个像素的 rgb 平均值之和的所有点,然后对点的总数进行平均

4

2 回答 2

1

转换为 HSL 并使用 H(色调)的差异对颜色进行分组。

于 2011-07-14T02:29:20.263 回答
1

因此,如果您的问题是“将图像转换为 HSL 空间后我该怎么办?!” 那么这里是:

  1. cvCvtColor()使用标志将您加载的 RGB 图像转换为 HSL CV_RGB2HLS(HSL 图像自然应该是 3 通道)
  2. 为 H、L、S 通道制作三张单通道图像(大小相同)以分离成
  3. cvSplit( hls, h, l, s, 0 )将 HSL 图像分离为通道
  4. 现在 h_image 就像任何单通道灰度图像一样。因此,在提取组件之后(通过对 RGB 图像进行阈值处理,有时色调通道图像看起来很奇怪:P)只需比较色调图像中与其坐标对应的颜色。

希望这可以帮助。

于 2011-07-15T01:05:58.617 回答