5.1 色彩空间
OpenCV
拆 分 一 幅 彩 色 图 像 的 通 道 后 , 默 认 的 通 道 顺 序 是
B→G→R
5.1.1 GRAY色彩空间
GRAY
色彩空间通常指的是灰度图像,灰度图像是一种每个像素都是从黑到白,被处理为256个灰度级别的单色图像。其中,“0”表示纯黑色,“255”表示纯白色。
从BGR色彩空间转换到GRAY色彩空间
dst = cv2.cvtColor(src, code)
dst
:转换后的图像
src
:转换前的初始图像
code
:色彩空间转换码
#当图像从BGR色彩空间转换到GRAY色彩空间时,常用的色彩空间转换码是cv2.COLOR_BGR2GRAY。
虽然色彩空间类型转换是双向的,但是灰度图像是无法转换成彩色图像的。这是因为在彩色图像转换成灰度图像的过程中,丢失了颜色比例。
5.1.2 HSV色彩空间
色调(H)是指光的颜色
在
OpenCV
中, 色调在区间[0, 180]
内取值。例如,代表红色、黄色、绿色和蓝色的色调值分别为0
、
30
、
60
和
120
。
饱和度(S)是指色彩的深浅
在
OpenCV
中,饱和度在区间
[0, 255]内取值。当饱和度为
0
时,图像将变为灰度图像。
亮度(V)是指光的明暗
与饱和度相同,在 OpenCV中,亮度在区间
[0, 255]
内取值。亮度值越大,图像越亮;当亮度值为0
时,图像呈纯黑色。
从BGR色彩空间转换到HSV色彩空间
cvtColor()
方法不仅能将图像从
BGR
色彩空间转换 到GRAY
色彩空间,还能将图像从
BGR
色彩空间转换到
HSV
色彩空间。
#色彩空间转换码是
cv2.COLOR_BGR2HSV
或
cv2.COLOR_HSV2BGR
5.2 通道
##在
BGR
色彩空间中,图像的通道由
B
通道、
G
通道和
R
通道构成。
5.2.1
拆分通道
1
.拆分一幅
BGR
图像中的通道
b, g, r = cv2.split(bgr_image) #b:B通道图像 g:G通道图像 r:R通道图像。
能拆出三幅图
2
.拆分一幅
HSV
图像中的通道
h, s, v = cv2.split(hsv_image)
## h:H通道图像。
s:
S
通道图像。
v:
V
通道图像。
hsv_image:一幅
HSV
图像
5.2.2 合并通道
虽然拆分通道后, 会得到3
幅不同亮度的灰度图像;但是将这
3
幅不同亮度的灰度图像合 并后,又重新得到原图。
1
.合并
B
通道图像、
G
通道图像和
R
通道图像
bgr = cv2.merge([b, g, r])
#bgr:按B→G→R的顺序合并通道后得到的图像。
b:B通道图像。 g:G通道图像。 r:R通道图像。
2
.合并
H
通道图像、
S
通道图像和
V
通道图像
hsv = cv2.merge([h, s, v])
5.2.3 综合运用拆分通道和合并通道
在
HSV
色彩空间内,如果保持其中两个通道的值不变,调整第
3
个 通道的值,会得到相应的艺术效果。
例:
只把
H
通道的值调整为
180
![](https://i-blog.csdnimg.cn/blog_migrate/f0d91ecff6e1bae7bbbc17b23cb39f17.png)
v[:, :] = 255 #
将
V
通道的值调整为
255
h[:, :] = 180 #
将
H
通道的值调整为
180
s[:, :] = 255 #
将
S
通道的值调整为
255
5.2.4 alpha通道
BGR
色彩空间包含了
3
个通道,即
B
通道、
G
通道和
R
通道。
OpenCV
在
BGR
色彩空间的基础上,又增加了一个用于设置图像透明
度的
A
通道,即
alpha
通道。
alpha
通道在区间
[0, 255]
内取值;其中,
0
表示透明,
255
表示
不透明。
cvtColor()方法可以把BGR转为BGRA
cv2.COLOR_BGR2BGRA
5.3 小结
当使用
cvtColor()
方法转换色彩空间时,虽然彩色图像能够转换为
灰度图像,但是灰度图像不能转换为彩色图像。对于
HSV
色彩空间,
如果保持其中两个通道的值不变,调整第
3
个通道的值,会得到相应的
艺术效果。
当使用
alpha
通道设置图像的透明度时,
为了能够直观地看到图像的透明效果,需先保存已经设置透明度的图
像。