1. 学习目标
- 图像色彩空间;
- 函数说明与解释;
- 学习如何将图像从一个色彩空间转换到另一个,像BGR↔灰色,BGR↔HSV等;
- 学习 cv.cvtColor 函数的使用。
2. 常见色彩空间
3. 常见色彩空间说明
名称 | 说明 |
---|---|
HSV | 对计算机友好,区分各种色彩。 |
RGB | 设备独立。 |
YCrCb | Y分量表示信息,CrCb可以被压缩。 |
RGB是计算机显示器的标准支持色彩系统。
4. 常见色彩空间取值范围
名称 | 范围 |
---|---|
HSV | H:0-180;SV:0-255 |
RGB | 0-255 |
5. 色彩空间转换注意事项
- 从一个色彩空间转换到另一个色彩空间,信息传递会损失;
- 从一个色彩空间转换到另一个色彩空间,过程可逆与不可逆。
6. 色彩空间转换函数 cv.cvtColor()
6.1 参数说明
代码语言:javascript复制import cv2 as cv
cv.cvtColor(src, code[,dst[,dstCn]])
名称 | 说明 |
---|---|
src | 表示输入图像。 |
code | 表示转换的类型。 |
6.2 注意
- HSV的色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。
- OpenCV中有超过150种颜色空间转换方法。
- 最广泛使用的是BGR↔灰色和BGR↔HSV。
- 不同的软件使用不同的规模。
- 如果你要将OpenCV值和它们比较,你需要将这些范围标准化。
6.3 获取色彩空间的转换类型
- 获取代码
import cv2 as cv
types = [i for i in dir(cv) if i.startswith('COLOR_')]
print(types)
- 部分类型截图
7. 代码演示
7.1 BGR↔HSV、BGR↔YCrCb
7.1.1 代码
- 彩色图像模式读取图片;
- 显示读取的原图;
- 使用 cv.cvtColor 将原图转换为 HSV 类型;
- 显示 HSV 类型图像;
- 使用 cv.cvtColor 将原图转换为 YCrCb 类型;
- 显示 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 代码
- 彩色图像模式读取图片;
- 显示读取的原图;
- 使用 cv.cvtColor 将原图转换为 GRAY 类型;
- 显示 GRAY 类型图像;
- 使用 cv.cvtColor 将第三步转换的图片逆转为 BGR;
- 显示逆转的 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 注意
- BGR↔GRAY将三通道彩色图像转换为了单通道灰度图像,信息传递存在损失。
- 当三通道彩色图像转换为了单通道灰度图像,信息损失,不可逆转为三通道彩色图像。
7.3 色彩空间转换可逆实例
7.3.1 代码
- 彩色图像模式读取图片;
- 显示读取的原图;
- 使用 cv.cvtColor 将原图转换为 HSV 类型;
- 显示 HSV 类型图像;
- 使用 cv.cvtColor 将第三步转换的图片逆转为 BGR;
- 显示逆转的 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. 总结
- 从一个色彩空间转换到另一个色彩空间,信息传递会损失;
- 从一个色彩空间转换到另一个色彩空间,过程可逆与不可逆。
- HSV的色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。
- OpenCV中有超过150种颜色空间转换方法。
- 最广泛使用的是BGR↔灰色和BGR↔HSV。
- 不同的软件使用不同的规模。
- 如果你要将OpenCV值和它们比较,你需要将这些范围标准化。