前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV-Python学习(3)—— OpenCV 图像色彩空间转换

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

作者头像
Rattenking
发布2022-10-04 08:42:04
5730
发布2022-10-04 08:42:04
举报
文章被收录于专栏:RattenkingRattenking

1. 学习目标

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

2. 常见色彩空间

在这里插入图片描述
在这里插入图片描述

3. 常见色彩空间说明

名称

说明

HSV

对计算机友好,区分各种色彩。

RGB

设备独立。

YCrCb

Y分量表示信息,CrCb可以被压缩。

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

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

名称

范围

HSV

H:0-180;SV:0-255

RGB

0-255

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

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

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

6.1 参数说明
代码语言:javascript
复制
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. 获取代码
代码语言:javascript
复制
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 类型图像。
代码语言:javascript
复制
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 类型图像;
代码语言:javascript
复制
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 类型图像;
代码语言:javascript
复制
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值和它们比较,你需要将这些范围标准化。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 学习目标
  • 2. 常见色彩空间
  • 3. 常见色彩空间说明
  • 4. 常见色彩空间取值范围
  • 5. 色彩空间转换注意事项
  • 6. 色彩空间转换函数 cv.cvtColor()
    • 6.1 参数说明
      • 6.2 注意
        • 6.3 获取色彩空间的转换类型
        • 7. 代码演示
          • 7.1 BGR↔HSV、BGR↔YCrCb
            • 7.1.1 代码
            • 7.1.2 结果
          • 7.2 色彩空间转换不可逆实例
            • 7.2.1 代码
            • 7.2.2 结果
            • 7.2.3 注意
          • 7.3 色彩空间转换可逆实例
            • 7.3.1 代码
            • 7.3.2 结果
        • 8. 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档