数字图像在内存中的存储方式
数字图像在内存中的存储就是一排排数字矩阵,如下图所示:
上图展示了图片中很小一个区域在内存中的存储形式,矩阵中的数值表示每个像素点强度值的大小。
OpenCv 读取图像数据并形成内存中的像素矩阵,像素矩阵的排布与图像的颜色空间和数据类型有关。OpenCv 作为一个计算机视觉库,其主要工作是处理和操作这些像素矩阵信息。
颜色空间是指针对一个给定的颜色模型,如何组合像素并对其进行编码;常见的颜色空间有灰度级空间、RGB颜色空间、HSV/HLS颜色空间、YCrCb颜色空间。数据类型决定了控制颜色的精度,常见的数据类型有无符号(
0
0
0 到
255
255
255 之间)的 char
,有符号(
−
127
-127
−127 到
127
127
127 之间)的 char
,
f
l
o
a
t
float
float型(
4
4
4 字节,
32
32
32位),double
型(
8
8
8字节,
64
64
64位),其中,float
和 double
可以给出更精细的颜色分辨能力。同时增加像素的尺寸也会增加图像所占的内存空间。
RGB颜色空间模型
R G B RGB RGB 的颜色空间:该颜色空间主要用于计算机图形学中,表示每个像素具有 R 、 G 、 B R、G、B R、G、B 三种颜色分量,每个分量均为 [ 0 , 255 ] [0, 255] [0,255] 的大小,以三个分量为坐标轴,构建一个三维颜色空间。如下图所示。
由图可知:
[
0
,
0
,
0
]
[0, 0, 0]
[0,0,0]:纯黑色;
[
255
,
255
,
255
]
[255, 255, 255]
[255,255,255]:纯白色;
[
255
,
0
,
0
]
[255, 0, 0]
[255,0,0]:纯红色;
[
0
,
255
,
0
]
[0, 255, 0]
[0,255,0]:纯绿色;
[
0
,
0
,
255
]
[0, 0, 255]
[0,0,255]:纯蓝色。
图片中任何一个带颜色的像素都是由RGB构成的结构[B, G, R, A](这是OpenCv的存储顺序, 不同于我们认为RGB顺序)。
HSV的颜色空间
这个颜色模型中参数分别是:色调(H),饱和度(S),明度(V)。
- 色调(H):用角度来度量,取值范围为 [ 0 ° , 360 ° ] [0°,360°] [0°,360°],从红色开始按逆时针方向计算,红色为 0 ° 0° 0°,绿色为 120 ° 120° 120°,蓝色为 240 ° 240° 240°。它们的补色是:黄色为 60 ° 60° 60°,青色为 180 ° 180° 180°,品红为 300 ° 300° 300°。
- 饱和度(S):饱和度 S S S 表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果,其中光谱色所占的比例越大,颜色接近光谱色的成都越高,颜色的饱和度也就越高。饱和度越高,颜色则深而艳。光谱色的白光成分为 0 0 0,饱和度达到最高。通常取值范围为 [ 0 % , 100 % ] [0\%,100\%] [0%,100%],值越大,颜色越饱和。
- 明度(V):明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。同城取值为 [ 0 % , 100 % ] [0\%, 100\%] [0%,100%]。与光强度没有直接的联系。
H S V HSV HSV 模型的三维表示从 R G B RGB RGB 立方体演化而来。设想从 R G B RGB RGB 沿着立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿着垂直轴测量。
H S V HSV HSV 对于用户来说是一种直观的颜色模型。例如,要得到一种彩色模型,我们先指定彩色角 H H H,并让 A = S = 1 A=S=1 A=S=1,然后我们通过向其中加入黑色和白色得到我们需要的颜色。增加黑色可以减小 V V V 而 S S S 不变,增加白色可以减小 S S S 而 V V V 不变。例如,要得到深蓝色, V = 0.4 , S = 1 , H = 240 V=0.4, S = 1, H = 240 V=0.4,S=1,H=240;
HSI的颜色空间
H S I HSI HSI,也可以叫 H S L ( H u e − S a t u r a t i o n − I n t e n s i t y ( L i g h t n e s s ) ) HSL(Hue-Saturation-Intensity(Lightness)) HSL(Hue−Saturation−Intensity(Lightness)),其类似与 H S V HSV HSV 颜色空间模型。
- 色调(H),饱和度(S):与 H S V HSV HSV 颜色模型的概念是一样的。颜色空间任一点距离 I I I 的距离。
- 强度(I):对应成像亮度和图像灰度,是颜色的明亮程度。这个分量可以从图片彩色信息(色调和饱和度)里消去,使得
H
S
I
HSI
HSI 模型成为开发基于彩色描述的图像处理方法的良好工具,而这种彩色描述对于人来说是自然而直观的。
注意:当强度 I = 0 I=0 I=0 时,色调、饱和度 S S S 无定义;当 S = 0 S=0 S=0 时,色调 H H H 无定义。
HSV与HSI颜色空间模型的区别
H
S
I
HSI
HSI 和
H
S
V
HSV
HSV 的颜色模型比较接近,它们用来描述颜色相对于
R
G
B
RGB
RGB 等模型显得更加的自然。
在
H
S
I
HSI
HSI 和
H
S
V
HSV
HSV 中,
H
H
H 都表示色相,该值范围为
[
0
,
360
]
[0, 360]
[0,360],色相的意义就是光的波长,不同波长的光呈现了不同的色相。
S
S
S 都表示饱和度,其本质为一束光可能有很多种不同波长的单色光构成,波长越多颜色越分散,而单色光构成的色彩纯净度就很高。
两种模型唯一不同的就是最后一个分量:在
H
S
I
HSI
HSI 中表示亮度
(
L
i
g
h
t
n
e
s
s
/
L
u
m
i
n
a
n
c
e
/
I
n
t
e
n
s
i
t
y
)
(Lightness/Luminance/Intensity)
(Lightness/Luminance/Intensity);
H
S
V
HSV
HSV 中
V
V
V 表示明度(Value/Brightness)。
上图中能很好的对比出
H
S
I
HSI
HSI 和
H
S
V
HSV
HSV 的区别:在
H
S
I
HSI
HSI 中,圆柱体外围是纯色,这圈纯色为与亮度
(
L
/
I
)
(L/I)
(L/I) 等于
1
/
2
1/2
1/2 的部位;而在
H
S
V
HSV
HSV 中,纯色对应于明度
(
V
)
(V)
(V) 等于
1
1
1 的部位。
在
H
S
L
HSL
HSL 中,饱和度分量总是对应等价的灰度值;而在
H
S
V
HSV
HSV 中,在极大值时候,饱和度从全饱和渐变话到白色,这可以认为是反直觉的。
在
H
S
L
HSL
HSL 中,亮度的跨越是从黑色经过色相到白色的;而在
H
S
V
HSV
HSV 中,
V
V
V 分量是从黑色过渡到色相
(
H
)
(H)
(H) 的。
RGB、HSV和HSI的转换方法
RGB–>HSV
HSV --> RGB