• Python机器视觉--OpenCV入门--OpenCV中的色彩空间简介与色彩空间转换


    1. OpenCV中的色彩空间

    1.1 RGB和BGR

    最常见的色彩空间就是RGB, 人眼也是基于RGB的色彩空间去分辨 颜色的.

    OpenCV默认使用的是BGR. BGR和RGB色彩空间的区别在于图片在色彩通道上的排列顺序不同.
    请添加图片描述
    请添加图片描述
    显示图片的时候需要注意适配图片的色彩空间和显示环境的色彩空间.比如传入的图片是BGR色彩空间, 显示环境是RBG空间, 就会出现颜色混乱的情况.

    1.2 HSV,HSL和YUV 色彩空间

    1.2.1 HSV色彩空间
    • OpenCV用的最多的色彩空间是HSV.
    • Hue: 色相, 即色彩, 如红色, 蓝色. 用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°
    • Saturation: 饱和度, 表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。
    • Value: 明度. 明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。
      请添加图片描述
      为什么要使用HSV?

    方便OpenCV做图像处理.比如根据hue的值就可以判断背景颜色.
    请添加图片描述

    1.2.2 HSL色彩空间

    HSL和HSV差不多.

    • Hue: 色相

    • Saturation: 饱和度

    • Lightness: 亮度

    请添加图片描述
    HSL在顶部是纯白的, 不管是什么颜色.

    请添加图片描述
    HSV和HSL的区别:

    请添加图片描述

    1.2.3 YUV色彩空间

    YUV,是一种颜色编码方法。常使用在各个视频处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。

    “Y”表示明亮度(Luminance或Luma),也就是灰阶值,“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

    Y’UV的发明是由于彩色电视与黑白电视的过渡时期。

    Y’UV最大的优点在于只需占用极少的带宽。

    • 4:4:4表示完全取样。

    • 4:2:2表示2:1的水平取样,垂直完全采样。

    • 4:2:0表示2:1的水平取样,垂直2:1采样。

    • 4:1:1表示4:1的水平取样,垂直完全采样。

    请添加图片描述

    1.3 色彩空间的转换

    • cvtColor(img, colorspace): 颜色转换的关键API
    import cv2
    
    def callback(value):
        pass
    
    cv2.namedWindow('color', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('mouse', 640, 480)
    
    img = cv2.imread('./cat.jpeg')
    
    # 常见的颜色空间转换
    colorspaces = [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA, 
                   cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV, 
                   cv2.COLOR_BGR2YUV]
    cv2.createTrackbar('curcolor', 'color', 0, 4, callback)
    
    while True:
        index = cv2.getTrackbarPos('curcolor', 'color')
    
        #颜色空间转换API
        cvt_img = cv2.cvtColor(img, colorspaces[index])
    
        cv2.imshow('color', cvt_img)
        key = cv2.waitKey(10)
        if key & 0xFF == ord('q'):
            break
    
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    安卓逆向简介
    Eureka 相关配置及特性
    大学康复训练
    Cookie和session的区别
    公司如何实现多套环境的自动化测试?
    嵌入式分享合集36
    状态压缩学习笔记
    Python滑动窗口算法:滑动窗口算法(4 by 4 sliding window price)
    java医用物资信息管理系统 ssm
    远程控制软件
  • 原文地址:https://blog.csdn.net/qq_43944517/article/details/126206921