Opencv 比较颜色时是否需要更改颜色空间,仅由计算机评估?

Opencv 比较颜色时是否需要更改颜色空间,仅由计算机评估?,opencv,colors,Opencv,Colors,我很困惑是否需要更改颜色空间以进行颜色比较。我读过delta E,即Lab格式,我确实理解RGB颜色空间中的比较似乎不适合人眼。然而,我的程序使用一个线性色标,从彩色血流多普勒信号计算速度。它获取采样区域的平均颜色,并将其与比例的颜色进行比较,以使用欧几里德距离找到其最近的邻居。我完全是在BGR(OpenCV)颜色空间中这样做的,如下图所示: 在这里,我为每个颜色圈获得了看似正确的速度值,但这只是偶然的,还是我的假设正确吗?因为颜色比较是在内部进行的,所以我所在的颜色空间无关紧要?因为您搜索最

我很困惑是否需要更改颜色空间以进行颜色比较。我读过delta E,即Lab格式,我确实理解RGB颜色空间中的比较似乎不适合人眼。然而,我的程序使用一个线性色标,从彩色血流多普勒信号计算速度。它获取采样区域的平均颜色,并将其与比例的颜色进行比较,以使用欧几里德距离找到其最近的邻居。我完全是在BGR(OpenCV)颜色空间中这样做的,如下图所示:


在这里,我为每个颜色圈获得了看似正确的速度值,但这只是偶然的,还是我的假设正确吗?因为颜色比较是在内部进行的,所以我所在的颜色空间无关紧要?

因为您搜索最近的邻居,并使用3D点(在颜色空间中)进行操作选择什么颜色空间并不重要,它们只会以不同的方式显示

颜色的比较不是直截了当的。你需要决定是什么定义了一种颜色接近另一种颜色,然后选择最合适的颜色空间来支持它

例如,在HSL中工作将为您提供一种基于色调评估颜色的简单方法。如果您愿意忽略,或者至少降低饱和度和亮度的相关性,这是很好的

另一方面,如果您希望饱和度的点变化与色调的点变化相关,则使用RGB或CMYK更合适。通过将通道绘制为三轴,然后在两种颜色之间创建距离来测量距离。这有一个缺点,即饱和度的10点偏移与色调的10点偏移具有相同的测量差异,这在视觉上没有多大意义,因为感知的差异将不等同于数学上的差异

这带来了另一个考虑。人眼对不同颜色周围的颜色变化更敏感。例如,绿色比洋红更容易引起注意。所有这些都是进化的结果,但可能与你的表现有关

就我个人而言,我倾向于使用RGB,因为它是视觉显示所需的,但最常见的情况是,我会按色调排列颜色,以便方便地转换到HSL/HSB。

这从来都不是“需要”的,但如果你想比较颜色相似性,那么在HSL/HSV颜色空间中定义相似性可能会容易得多。