我想比较组件的填充颜色是否相等我做以下算法,我做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空间并进行比较但我不知道如何比较两种颜色?!!
换句话说,转换图像到HSL空间后,我能做什么?!
请帮忙!!
修改对问题进行更详细的说明我的意思是用分量(点序列)所以在平均步骤中实际上我重新访问所有的点计算每个像素的RGB平均值的总和,然后对点的总数进行平均
转换为HSL,并使用H(色调)的差异来分组颜色
所以如果你的问题是"将图像转换成HSL空间后我能做什么?!"那么这里是:
- 转换RGB图像你已经加载到HSL使用
cvCvtColor()
与CV_RGB2HLS
标志(HSL图像应该是3通道,自然) - 为H, L, S通道制作三张相同大小的单通道图像,将其分离到 中
-
cvSplit( hls, h, l, s, 0 )
将HSL图像分割成通道 现在h_image就像任何单通道灰度图像一样。因此,在提取组件后(从RGB图像阈值中执行此操作,有时色调通道图像看起来很奇怪:P)只需比较色调图像中对应于其坐标的颜色。
希望这对你有帮助。