一、图像原理

1.1 三原色

RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开。它是最通用的面向硬件的彩色模型。该模型用于彩色监视器和一大类彩色视频摄像。

RGB颜色空间 基于颜色的加法混色原理,从黑色不断叠加Red,Green,Blue的颜色,最终可以得到白色。

将R、G、B三个通道作为笛卡尔坐标系中的X、Y、Z轴,就得到了一种对于颜色的空间描述:

opencv 区域颜色识别 opencv颜色识别原理_计算机视觉

对于彩色图转灰度图,有一个很著名的心理学公式:
opencv 区域颜色识别 opencv颜色识别原理_opencv 区域颜色识别_02

1.2 RGB与HSV互转

HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)
色相: 色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。
饱和度(S):是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。
明度(V):取0-max(计算机中HSV取值范围和存储的长度有关)。
HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。

RGB颜色空间中,三种颜色分量的取值与所生成的颜色之间的联系并不直观。而HSV颜色空间,更类似于人类感觉颜色的方式,封装了关于颜色的信息:“这是什么颜色?深浅如何?明暗如何?

opencv 区域颜色识别 opencv颜色识别原理_opencv 区域颜色识别_03


1- RGB2HSV

opencv 区域颜色识别 opencv颜色识别原理_颜色空间_04

2- HSV2RGB

opencv 区域颜色识别 opencv颜色识别原理_python_05

二、opencv实现

"""
cv2.cvtColor(

src,  输入图像s
code, 颜色空间转换标识符 如 cv2.COLOR_BGR2hHSV
 具体可以参考: cv2.ColorConversionCode 部分 
dstCn=0  目标图像的通道数,该参数为0时
,目标图像根据源图像的通道数和具体操作自动决定
)
"""

# RGB2HSV
# [i for i in dir(cv2) if 'COLOR_' in i and '2HS' in i]
to_hsv_lst = ['COLOR_BGR2HSV', 'COLOR_BGR2HSV_FULL', 'COLOR_RGB2HSV', 'COLOR_RGB2HSV_FULL']
for i in to_hsv_lst:
    pic_ghsv = cv2.cvtColor(img, eval(f'cv2.{i}'))
    cv2.imshow(f"{i}", pic_ghsv)

# RGB2GRAY
pic_gray = cv2.cvtColor(img , cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray Scale", pic_gray)
cv2.imshow("original", img)
cv2.waitKey(0)

opencv 区域颜色识别 opencv颜色识别原理_opencv_06