🌈据说,看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。
前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:OpenCV从入门到放弃 ,一个学习OpenCV的专栏~
RGB
类似 Matplotlib 等软件使用这标准的色彩空间(人眼也是这么看世界的颜色)。
R 就是 Red 的缩写;G 就是 Green 的缩写;B 就是 Blue 的缩写。
BGR
这是 OpenCV 默认显示的色彩空间。
字母缩写含义同 RGB 。
HSV / HSB
这是 OpenCV 里用的最多的色彩空间。
为什么常用,因为可以仅仅通过第一个字母 H 即 Hue 来判断色彩颜色:

三个字母含义如下:
-
HHue:色相,即色彩,如红色,蓝色,用角度度量,范围 0°~360° ,从红色开始逆时针计算(红色0°,绿色120°,蓝色240°)。- 在上图中是圆周上弧长对应的圆心角不同。
- 颜色表盘:

-
SSaturation:饱和度,表示颜色接近光谱色的程度,可以理解为纯色中混入白色的量;理解成溶液的话就是,在纯浅色溶质中加入了白色的溶剂(综合)。范围 0%~100% ,值越大,越饱和。- 在上图中是圆心到圆周之间半径上的长度不同。
-
V/BValue/Bright:明度 / 亮度,范围 0%(黑)~100%(白)。
HSL
字面意思与 HSV 一致,但这里的 S 指的是颜色的纯度;理解成溶液的话就是,在纯浅色溶质中加入了无色的溶剂(稀释)。这里的 L 在顶部是纯白色,底部是纯黑色,不管是什么 Hue 颜色。

HSV(B) 与 HSL 图解区别:

对比 HSV(B) 和 HSL 的区别:
HSB:S控制纯色中混入白色的量,值越大,白色越少,颜色越纯。HSB:B控制纯色中混入白色的量,值越大,白色越少,颜色越纯。HSL:S和黑白没有关系,饱和度不控制颜色中混入黑白的多少。HSL:L控制纯色中混入的黑白两种颜色。
YUV
一种颜色编码的方法,在以前看有线电视、卫星电视时,为了能使用有限的带宽进行较快的响应,所以采用这种编码方式,既能满足人眼需求,又能占用极少的带宽。其发明是在彩色电视与黑白电视的过渡时期。
Y:明亮度,也就是灰阶值(黑白电视的编码)。U、V:色度, 用于描述影像色彩及饱和度,用于指定像素的颜色。
不同比例的区别:
- 4:4:4 :表示完全采样(没有压缩,带宽最大)。
- 4:2:2 :表示2:1的水平取样,垂直完全采样。
- 4:2:0 :表示2:1的水平取样,垂直2:1采样(用的最多)。
- 4:1:1 :表示4:1的水平取样,垂直完全采样。
OpenCV中的颜色转换方法
应该不会有人会想记住所有形式吧?
在PyCharm中,输入前缀即可查看:

在Jputer中,按下 Tab 键即可打开提示:

输入的越多,提示的越细:

实际的小栗子(变色猫):
from cv2 import cv2
def callback(value):
pass
cv2.namedWindow('color', cv2.WINDOW_NORMAL)
cv2.resizeWindow('color', 640, 480)
# 读取图片,OpenCV读进来的图片默认是BGR的色彩空间。
img= cv2.imread('./cat.jpeg')
# 定义颜色空间转化方法。
color_spaces = [
# 所有颜色空间的转化都是COLOR开头。
cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA,
cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV,
cv2.COLOR_BGR2YUV
]
# 设置trackbar
cv2.createTrackbar('trackbar', 'color', 0, 4, callback)
while True:
# 获取trackbar的值
index = cv2.getTrackbarPos('trackbar', 'color')
# 进行颜色空间转换
cvt_img = cv2.cvtColor(img, color_spaces[index])
cv2.imshow('color', cvt_img)
if cv2.waitKey(10) == ord('q'):
break
cv2.destroyAllWindows()
或者使用 callback 函数进行处理:
from cv2 import cv2
def callback(value):
# 进行颜色空间转换
cvt_img = cv2.cvtColor(img, color_spaces[value])
cv2.imshow('color', cvt_img)
cv2.namedWindow('color', cv2.WINDOW_NORMAL)
cv2.resizeWindow('color', 640, 480)
# 读取图片,OpenCV读进来的图片默认是BGR的色彩空间。
img = cv2.imread('./cat.jpeg')
# 定义颜色空间转化方法。
color_spaces = [
# 所有颜色空间的转化都是COLOR开头。
cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA,
cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV,
cv2.COLOR_BGR2YUV
]
# 设置trackbar
cv2.createTrackbar('trackbar', 'color', 0, 4, callback)
callback(0)
cv2.waitKey(0)
cv2.destroyAllWindows()
滑动 trackbar 就能看到不同的处理后的猫~
(RGBA 与 RGB ) 或 (BGRA 与 BGR) 的区别就在于, A 是透明度,一般保存 png 文件才会有。





本文介绍了OpenCV中的色彩空间,包括RGB、BGR、HSV/HSB、HSL和YUV,详细解释了各色彩空间的含义,并展示了如何使用OpenCV进行颜色转换。通过实例代码演示了如何使用trackbar实时改变图像色彩空间,帮助读者更好地理解和应用色彩空间转换。

1471

被折叠的 条评论
为什么被折叠?



