zoukankan      html  css  js  c++  java
  • OpenCV---色彩空间(一)

    颜色空间:用三种或者更多特征来指定颜色的方法,被称为颜色空间或者颜色模型

    1.RGB(OpenCV中为BGR):

    一幅图像由三个独立的图像平面或者通道构成:红、蓝、绿(以及可选项:透明度alpha通道)
    每个值代表每个像素的每个分量的度量值,值越高对应于更亮的像素
    对应于人眼的三种光锥细胞,所以被广泛使用
    RGB色彩空间源于使用阴极射线管的彩色电视,
    RGB分别代表三个基色(R-红色、G-绿色、B-蓝色),具体的色彩值由三个基色叠加而成。
    在图像处理中,我们往往使用向量表示色彩的值,如(0,0,0)表示黑色、(255, 255, 255)表示白色。
    其中,255表示色彩空间被量化成255个数,最高亮度值为255(255 = 2^8 - 1,即每个色彩通道用8位表示)。
    在这个色彩空间中,有256*256*256种颜色。RGB色彩空间如下图所示(图片来自百度百科)。是一个包含Red、Green、Blue的三维空间。

    2.HSV

    推文:OpenCV 自学笔记21. RGB色彩空间和HSV色彩空间的理解

    H:0-360在OpenCV中被规范为0-180,若是360超出255溢出,所有规划到180,,8位可以保存,是HSV3位保存一致,都是只占一个字节
    S和V:在OpenCV中规范化为0-255(一个字节就可以表示)

    HSV颜色空间输入面向色度的颜色坐标系统的一种。这种类型的颜色模型接近人类颜色感知的仿真模型。
    HSV的三个通道表示色度(H给出的颜色光谱构成的一种度量),饱和度(S给出主波长中的纯光比例,这表明一种颜色距离相同亮度灰度的程度)和纯度(V给出相对于白色光照强度的亮度),对应于直觉上的色彩、明暗和色调。HSV广泛应用于色彩的比较。

    OpenCV中的imshow()函数假设图像的颜色以RGB显示,因此其他显示均不正确。所以首先必须将其转换成RGB颜色空间

    3.HLS:

    HLS属于面向色度的颜色坐标系统中的一种,和之前的HSV类似
    用来指定每个通道中的一种颜色的色度值、明暗值、饱和度值
    与HSV不同的是HSL定义的一种纯颜色的亮度等于一种中等灰色的亮度
    而HSV定义的一种纯颜色的亮度等于白色的亮度

    4.YCrCb

    该空间广泛用于视频和图像压缩,不能算作纯粹的色彩空间,它是RGB颜色空间的一种解码方式
    Y通道表示亮度,而Cr和Cb表示红色差值(在RGB空间中R通道和Y的差值)和蓝色差值(在RGB空间中B通道和Y的差值)各自的色度分量。

    5.灰度图

    每个像素值只表示灰度信息这一单一信息
    RGB[A]准换成灰度:Y=0.299*R+0.587*G+0.114*B
    灰度转换为RGB[A]:R=Y,G=Y,B=Y,A=max(ChannelRange)

    推文:【OpenCV】笔记(9)——色彩空间和颜色处理

    6.YUV

    推文:YUV格式分析

    Y = 0.299R + 0.587G + 0.114B
    U = -0.147R - 0.289G + 0.436B
    V = 0.615R - 0.515G - 0.100B
    
    R = Y + 1.14V
    G = Y - 0.39U - 0.58V
    B = Y + 2.03U

    7.色彩空间api相互转换

    import cv2 as cv
    
    def color_space_conv(image):
        gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #RGB转灰度图
        cv.imshow("gray",gray)
        hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV)   #RGB转HSV
        cv.imshow("hsv",hsv)
        yuv = cv.cvtColor(image,cv.COLOR_BGR2YUV)   #RGB转YUV
        cv.imshow("yuv",yuv)
        ycrcb = cv.cvtColor(image,cv.COLOR_BGR2YCrCb)#RGB转YCrCb
        cv.imshow("ycrcb",ycrcb)
        hls = cv.cvtColor(image,cv.COLOR_BGR2HLS)   #RGB转HLS
        cv.imshow("hls",hls)
    
    src = cv.imread("./1.png")  #读取图片
    cv.namedWindow("RGB",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
    cv.imshow("RGB",src)    #通过名字将图像和窗口联系
    t1 = cv.getTickCount()  #获取时间,用于精度计时,操作系统启动所经过(elapsed)的毫秒数
    color_space_conv(src)
    t2 = cv.getTickCount()
    print((t2-t1)/cv.getTickFrequency())    #getTickFrequency()是获取一秒钟结果的点数,获取秒数
    cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
    cv.destroyAllWindows()  #销毁所有窗口

  • 相关阅读:
    Django
    python django框架学习
    Http Header里的Content-Type
    Python 头部 #!/usr/bin/python 和 #!/usr/bin/env python的区别
    关于“编译型语言”和“解释性语言”的区别
    Axure XMind整理交互思路
    异常处理
    re模块
    模块
    正则表达式**************************
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9260115.html
Copyright © 2011-2022 走看看