OpenCV实现了数百个与颜色模型转换相关的公式。一些颜色模型常用于摄像头等输入设备,而其他模型则常用于电视机、计算机显示器和打印机等输出设备。在输入和输出之间,在我们将计算机视觉技术应用于图像时,通常使用3种类型的颜色模型:灰度、BGR(蓝–绿–红)和HSV(色调–饱和度–值)。让我们简单回顾一下:
·灰度模型是通过将颜色信息转换为灰度或亮度来减少颜色信息的一种模型。在只有亮度信息就足够的问题中(如人脸检测),这个模型对于图像的中间处理非常有用。通常,灰度图像中的每个像素都是由一个8位值表示的,范围从0(黑色)到255(白色)。
·BGR表示蓝–绿–红颜色模型,其中每个像素都有一个三元组值表示的蓝、绿、红分量或者像素颜色的通道。Web开发人员以及任何从事计算机图形工作的人员除了反向通道顺序(RGB)外,还都熟悉类似的颜色定义。通常,BGR图像中的每个像素都由一个8位的三元组值来表示,例如[0,0,0]表示黑色,[255,0,0]表示蓝色,[0,255,0]表示绿色,[0,0,255]表示红色,[255,255,255]表示白色。
·HSV模型使用一个不同的三元组通道。色调(hue)是颜色的基调,饱和度(saturation)是颜色的强度,值(value)表示颜色的亮度。
默认情况下,OpenCV使用BGR颜色模型(每个通道8位)表示其从文件加载或从摄像头抓取的任何图像。
既然我们已经定义了将要使用的颜色模型,那么就来考虑一下默认模型与我们对颜色的直观理解有什么不同吧。
对于刚接触BGR颜色空间的人来说,有些颜色叠加在一起看起来似乎不太合适:例如,(0,255,255)三元组(无蓝色、全绿色和全红色)产生黄色。如果你有艺术背景,甚至不需要拿起颜料和画笔就知道绿色和红色颜料混合在一起会变成棕色。但是,在计算中使用的颜色模型称为加法(additive)模型,处理的是光。光的表现与绘画颜料(遵循减色模型)不同,因此软件在以发光显示器为媒介的计算机上运行,参考的颜色模型是加法模型。