【OpenCV学习】OpenCV的色彩空间

据说,看我文章时 关注、点赞、收藏帅哥美女们 心情都会不自觉的好起来。

前言:
作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
专栏介绍:OpenCV从入门到放弃 ,一个学习OpenCV的专栏~

专栏文章直链:
【OpenCV学习】初识OpenCV其二
【OpenCV学习】初识OpenCV人生苦短,我用python

OpenCV的色彩空间

  • RGB
  • BGR
  • HSV / HSB
  • HSL
  • YUV
  • OpenCV中的颜色转换方法

RGB

类似 Matplotlib 等软件使用这标准的色彩空间(人眼也是这么看世界的颜色)。
R 就是 Red 的缩写;G 就是 Green 的缩写;B 就是 Blue 的缩写。

BGR

这是 OpenCV 默认显示的色彩空间。
字母缩写含义同 RGB

HSV / HSB

这是 OpenCV 里用的最多的色彩空间。
为什么常用,因为可以仅仅通过第一个字母 HHue 来判断色彩颜色:

【OpenCV学习】OpenCV的色彩空间_第1张图片
三个字母含义如下:

  • H

    • Hue :色相,即色彩,如红色,蓝色,用角度度量,范围 0°~360° ,从红色开始逆时针计算(红色0°,绿色120°,蓝色240°)。
    • 在上图中是圆周上弧长对应的圆心角不同。
    • 颜色表盘:【OpenCV学习】OpenCV的色彩空间_第2张图片
  • S

    • Saturation :饱和度,表示颜色接近光谱色的程度,可以理解为纯色中混入白色的量;理解成溶液的话就是,在纯浅色溶质中加入了白色的溶剂(综合)。范围 0%~100% ,值越大,越饱和。
    • 在上图中是圆心到圆周之间半径上的长度不同。
  • V / B

    • Value / Bright :明度 / 亮度,范围 0%(黑)~100%(白)。

HSL

字面意思与 HSV 一致,但这里的 S 指的是颜色的纯度;理解成溶液的话就是,在纯浅色溶质中加入了无色的溶剂(稀释)。这里的 L 在顶部是纯白色,底部是纯黑色,不管是什么 Hue 颜色。

【OpenCV学习】OpenCV的色彩空间_第3张图片

HSV(B)HSL 图解区别:

【OpenCV学习】OpenCV的色彩空间_第4张图片

对比 HSV(B)HSL 的区别:

  • HSBS 控制纯色中混入白色的量,值越大,白色越少,颜色越纯。
  • HSBB 控制纯色中混入白色的量,值越大,白色越少,颜色越纯。
  • HSLS 和黑白没有关系,饱和度不控制颜色中混入黑白的多少。
  • HSLL 控制纯色中混入的黑白两种颜色。

YUV

一种颜色编码的方法,在以前看有线电视、卫星电视时,为了能使用有限的带宽进行较快的响应,所以采用这种编码方式,既能满足人眼需求,又能占用极少的带宽。其发明是在彩色电视与黑白电视的过渡时期。

  • Y :明亮度,也就是灰阶值(黑白电视的编码)。
  • UV :色度, 用于描述影像色彩及饱和度,用于指定像素的颜色。

不同比例的区别:

  • 4:4:4 :表示完全采样(没有压缩,带宽最大)。
  • 4:2:2 :表示2:1的水平取样,垂直完全采样。
  • 4:2:0 :表示2:1的水平取样,垂直2:1采样(用的最多)。
  • 4:1:1 :表示4:1的水平取样,垂直完全采样。

OpenCV中的颜色转换方法

应该不会有人会想记住所有形式吧?
PyCharm中,输入前缀即可查看:
【OpenCV学习】OpenCV的色彩空间_第5张图片
Jputer中,按下 Tab 键即可打开提示:

【OpenCV学习】OpenCV的色彩空间_第6张图片
输入的越多,提示的越细:
【OpenCV学习】OpenCV的色彩空间_第7张图片
实际的小栗子(变色猫):

from cv2 import cv2


def callback(value):
    pass


cv2.namedWindow('color', cv2.WINDOW_NORMAL)
cv2.resizeWindow('color', 640, 480)
# 读取图片,OpenCV读进来的图片默认是BGR的色彩空间。
img= cv2.imread('./cat.jpeg')
# 定义颜色空间转化方法。
color_spaces = [
    # 所有颜色空间的转化都是COLOR开头。
    cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA,
    cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV,
    cv2.COLOR_BGR2YUV
]
# 设置trackbar
cv2.createTrackbar('trackbar', 'color', 0, 4, callback)
while True:
    # 获取trackbar的值
    index = cv2.getTrackbarPos('trackbar', 'color')
    # 进行颜色空间转换
    cvt_img = cv2.cvtColor(img, color_spaces[index])
    cv2.imshow('color', cvt_img)
    if cv2.waitKey(10) == ord('q'):
        break
cv2.destroyAllWindows()

或者使用 callback 函数进行处理:

from cv2 import cv2


def callback(value):
    # 进行颜色空间转换
    cvt_img = cv2.cvtColor(img, color_spaces[value])
    cv2.imshow('color', cvt_img)


cv2.namedWindow('color', cv2.WINDOW_NORMAL)
cv2.resizeWindow('color', 640, 480)
# 读取图片,OpenCV读进来的图片默认是BGR的色彩空间。
img = cv2.imread('./cat.jpeg')
# 定义颜色空间转化方法。
color_spaces = [
    # 所有颜色空间的转化都是COLOR开头。
    cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA,
    cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV,
    cv2.COLOR_BGR2YUV
]
# 设置trackbar
cv2.createTrackbar('trackbar', 'color', 0, 4, callback)
callback(0)
cv2.waitKey(0)
cv2.destroyAllWindows()

滑动 trackbar 就能看到不同的处理后的猫~
(RGBARGB ) 或 (BGRABGR) 的区别就在于, A 是透明度,一般保存 png 文件才会有。

【OpenCV学习】OpenCV的色彩空间_第8张图片
【OpenCV学习】OpenCV的色彩空间_第9张图片
【OpenCV学习】OpenCV的色彩空间_第10张图片
【OpenCV学习】OpenCV的色彩空间_第11张图片
【OpenCV学习】OpenCV的色彩空间_第12张图片

你可能感兴趣的:(OpenCV从入门到放弃,opencv,计算机视觉,学习)