9.OpenCV的色彩空间变换



文章目录

  • 前言
  • 一、色彩空间变换
  • 1、RGB色彩空间
  • 2、GRAY色彩空间
  • 3、YCrCb色彩空间
  • 4、HSV色彩空间
  • 二、OpenCV-Python资源下载
  • 总结



前言

  色彩空间也称颜色模型、颜色空间、色彩模型等,它是图像在计算机内部的一种存储方式。常见的色彩空间包括RGB、GRAY、XYZ、YCrCb、HSV等。每种色彩空间都有其擅长的问题解决领域。所以在解决具体色彩问题时就需要进行特定的色彩类型空间转换。


一、色彩空间变换

  OpenCV的cv2.Color()函数用于转换色彩空间类型。

转换代码

说明

cv2.COLOR_BGR2RGB

将BGR色彩空间转换为RGB色彩空间

cv2.COLOR_BGR2GRAY

将BGR色彩空间转换为GRAY色彩空间

cv2.COLOR_BGR2YCrCb

将BGR色彩空间转换为YCrCb色彩空间

cv2.COLOR_BGR2HSV

将BGR色彩空间转换为HSV色彩空间

1、RGB色彩空间

  RGB色彩空间使用R(Red,红)、G(Green,绿)、B(Blue,蓝)3种基本颜色表示图像像素。RGB色彩空间中,图像的每一个像素用一个三元组表示,三元组中的3个值依次表示红色、绿色和蓝色,依次对应R、G、B通道。
  需要注意的是,OpenCV中默认使用BGR色彩空间,它按照B、G、R通道顺序表示图像。

# BGR to RGB
img = cv2.imread('bee.jpg')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

cv2.imshow('BGR', img)
cv2.imshow('RGB', img_rgb)

k = cv2.waitKey(0)
if k == 27:
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite('img_rgb.png', img_rgb)
    cv2.destroyAllWindows()

opencv 颜色融合 opencv颜色分类_python

2、GRAY色彩空间

  GRAY色彩空间通常指8位灰度图像,其颜色取值范围为[0,255],共256个灰度级。从BGR色彩空间转换为GRAY色彩空间的计算公式为:Gray = 0.299R + 0.587G + 0.114B,其中,R、G、B为RGB色彩空间中R、G、B通道的图像。

# BGR to GRAY
img = cv2.imread('bee.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv2.imshow('BGR', img)
cv2.imshow('GRAY', img_gray)

k = cv2.waitKey()
if k == 27:
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite('img_gray.png', img_gray)
    cv2.destroyAllWindows()

opencv 颜色融合 opencv颜色分类_opencv_02

3、YCrCb色彩空间

  YCrCb色彩空间用亮度Y,红色Cr、蓝色Cb表示图像。从BGR色彩空间转换为YCrCb色彩空间的计算公式为:
Y = 0.299R + 0.587G + 0.114B
Cr = 0.713(R - Y) + delta
Cb = 0.564(B - Y) + delta
其中,delta = 128(8位图像)、delta = 32767(16位图像)、delta = 0.5(单精度图像)

# BGR to YCrCb
img = cv2.imread('bee.jpg')
img_YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

cv2.imshow('BGR', img)
cv2.imshow('GRAY', img_YCrCb)

k = cv2.waitKey()
if k == 27:
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite('img_YCrCb.png', img_YCrCb)
    cv2.destroyAllWindows()

opencv 颜色融合 opencv颜色分类_计算机视觉_03

4、HSV色彩空间

  HSV色彩空间使用色调(Hue,也称色相)、饱和度(Saturation)、亮(Value)度表示图像。

  色调H表示颜色,用角度表示,取值范围为[0°,360°],从红光开始逆时针方向计算。
  饱和度S表示颜色接近光谱色的程度,或表示光谱色中混入白光的比例。光谱色中白光的比例越低,饱和度越高,颜色越深、艳。光谱色中白光比例为0时,饱和度达到最高。饱和度的取值范围为[0,1]。
  亮度V表示颜色的明亮的程度,是人眼可感受到的明暗程度,其取值范围为[0,1]。

opencv 颜色融合 opencv颜色分类_计算机视觉_04

# BGR to HSV
img = cv2.imread('bee.jpg')
img_HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

cv2.imshow('BGR', img)
cv2.imshow('HSV', img_HSV)

k = cv2.waitKey()
if k == 27:
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite('img_HSV.png', img_HSV)
    cv2.destroyAllWindows()

opencv 颜色融合 opencv颜色分类_计算机视觉_05


二、OpenCV-Python资源下载