• OpenCV-Python学习(3)—— OpenCV 图像色彩空间转换


    1. 学习目标

    1. 图像色彩空间;
    2. 函数说明与解释;
    3. 学习如何将图像从一个色彩空间转换到另一个,像BGR↔灰色,BGR↔HSV等;
    4. 学习 cv.cvtColor 函数的使用。

    2. 常见色彩空间

    在这里插入图片描述

    3. 常见色彩空间说明

    名称说明
    HSV对计算机友好,区分各种色彩。
    RGB设备独立。
    YCrCbY分量表示信息,CrCb可以被压缩。

    RGB是计算机显示器的标准支持色彩系统。

    4. 常见色彩空间取值范围

    名称范围
    HSVH:0-180;SV:0-255
    RGB0-255

    5. 色彩空间转换注意事项

    1. 从一个色彩空间转换到另一个色彩空间,信息传递会损失;
    2. 从一个色彩空间转换到另一个色彩空间,过程可逆与不可逆。

    6. 色彩空间转换函数 cv.cvtColor()

    6.1 参数说明
    import cv2 as cv
    cv.cvtColor(src, code[,dst[,dstCn]])
    
    名称说明
    src表示输入图像。
    code表示转换的类型。
    6.2 注意
    1. HSV的色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。
    2. OpenCV中有超过150种颜色空间转换方法。
    3. 最广泛使用的是BGR↔灰色和BGR↔HSV。
    4. 不同的软件使用不同的规模。
    5. 如果你要将OpenCV值和它们比较,你需要将这些范围标准化。
    6.3 获取色彩空间的转换类型
    1. 获取代码
    import cv2 as cv
    
    types = [i for i in dir(cv) if i.startswith('COLOR_')]
    print(types)
    
    1. 部分类型截图
      在这里插入图片描述

    7. 代码演示

    7.1 BGR↔HSV、BGR↔YCrCb
    7.1.1 代码
    1. 彩色图像模式读取图片;
    2. 显示读取的原图;
    3. 使用 cv.cvtColor 将原图转换为 HSV 类型;
    4. 显示 HSV 类型图像;
    5. 使用 cv.cvtColor 将原图转换为 YCrCb 类型;
    6. 显示 YCrCb 类型图像。
    import cv2 as cv
    
    def color_space_demo():
      img = cv.imread('./images/butterfly.jpg')
      cv.imshow('Original Image', img)
      hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
      cv.imshow('HSV Image', hsv)
      ycrcb = cv.cvtColor(img, cv.COLOR_BGR2YCrCb)
      cv.imshow('YCrCb Image', ycrcb)
      cv.waitKey(0)
      cv.destroyAllWindows()
    
    if __name__ == "__main__":
      color_space_demo()
    
    7.1.2 结果

    在这里插入图片描述

    7.2 色彩空间转换不可逆实例
    7.2.1 代码
    1. 彩色图像模式读取图片;
    2. 显示读取的原图;
    3. 使用 cv.cvtColor 将原图转换为 GRAY 类型;
    4. 显示 GRAY 类型图像;
    5. 使用 cv.cvtColor 将第三步转换的图片逆转为 BGR;
    6. 显示逆转的 BGR 类型图像;
    import cv2 as cv
    
    def irreversible_demo():
      img = cv.imread('./images/butterfly.jpg')
      cv.imshow('Original Image', img)
      gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
      cv.imshow('BGR2GRAY Image', gray)
      # 逆转原图
      gray2bgr = cv.cvtColor(gray, cv.COLOR_GRAY2BGR)
      cv.imshow('GRAY2BGR Image', gray2bgr)
      cv.waitKey(0)
      cv.destroyAllWindows()
    
    if __name__ == "__main__":
      irreversible_demo()
    
    7.2.2 结果

    在这里插入图片描述

    7.2.3 注意
    1. BGR↔GRAY将三通道彩色图像转换为了单通道灰度图像,信息传递存在损失。
    2. 当三通道彩色图像转换为了单通道灰度图像,信息损失,不可逆转为三通道彩色图像。
    7.3 色彩空间转换可逆实例
    7.3.1 代码
    1. 彩色图像模式读取图片;
    2. 显示读取的原图;
    3. 使用 cv.cvtColor 将原图转换为 HSV 类型;
    4. 显示 HSV 类型图像;
    5. 使用 cv.cvtColor 将第三步转换的图片逆转为 BGR;
    6. 显示逆转的 BGR 类型图像;
    import cv2 as cv
    
    def reversible_demo():
      img = cv.imread('./images/butterfly.jpg')
      cv.imshow('Original Image', img)
      hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
      cv.imshow('BGR2HSV Image', hsv)
      # 逆转原图
      hsv2bgr = cv.cvtColor(hsv, cv.COLOR_HSV2BGR)
      cv.imshow('HSV2BGR Image', hsv2bgr)
      cv.waitKey(0)
      cv.destroyAllWindows()
    
    if __name__ == "__main__":
      reversible_demo()
    
    7.3.2 结果

    在这里插入图片描述

    8. 总结

    1. 从一个色彩空间转换到另一个色彩空间,信息传递会损失;
    2. 从一个色彩空间转换到另一个色彩空间,过程可逆与不可逆。
    3. HSV的色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。
    4. OpenCV中有超过150种颜色空间转换方法。
    5. 最广泛使用的是BGR↔灰色和BGR↔HSV。
    6. 不同的软件使用不同的规模。
    7. 如果你要将OpenCV值和它们比较,你需要将这些范围标准化。
  • 相关阅读:
    基于未来搜索优化的BP神经网络(分类应用) - 附代码
    基于JAVA高校共享单车管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
    关于信息安全软考的记录3
    轴心时代的三大东方圣人老子、孔子和释迦牟尼
    Docker 最常用的镜像命令和容器命令
    python高级进阶
    【洛谷 P1644】跳马问题 题解(动态规划)
    接口自动化测试实战经验分享,测试用例也能自动生成
    JAVA开发(java技术选型)
    MySQL 多表查询 事务 索引
  • 原文地址:https://blog.csdn.net/m0_38082783/article/details/127109047