颜色空间:用三种或者更多特征来指定颜色的方法,被称为颜色空间或者颜色模型
1.RGB(OpenCV中为BGR):
一幅图像由三个独立的图像平面或者通道构成:红、蓝、绿(以及可选项:透明度alpha通道)
每个值代表每个像素的每个分量的度量值,值越高对应于更亮的像素
对应于人眼的三种光锥细胞,所以被广泛使用
RGB色彩空间源于使用阴极射线管的彩色电视,RGB分别代表三个基色(R-红色、G-绿色、B-蓝色),具体的色彩值由三个基色叠加而成。在图像处理中,我们往往使用向量表示色彩的值,如(
0,
0,
0)表示黑色、(
255,
255,
255)表示白色。其中,255表示色彩空间被量化成255个数,最高亮度值为255(
255 =
2^
8 -
1,即每个色彩通道用8位表示)。在这个色彩空间中,有256*
256*256种颜色。RGB色彩空间如下图所示(图片来自百度百科)。是一个包含Red、Green、Blue的三维空间。
2.HSV
推文:OpenCV 自学笔记21. RGB色彩空间和HSV色彩空间的理解
H:
0-
360,
在OpenCV中被规范为0-180,若是360超出255溢出,所有规划到180,,8位可以保存,是HSV3位保存一致,都是只占一个字节S和V:
在OpenCV中规范化为0-255(一个字节就可以表示)
HSV颜色空间输入面向色度的颜色坐标系统的一种。这种类型的颜色模型接近人类颜色感知的仿真模型。
HSV的三个通道表示色度(H给出的颜色光谱构成的一种度量),饱和度(S给出主波长中的纯光比例,这表明一种颜色距离相同亮度灰度的程度)和纯度(V给出相对于白色光照强度的亮度),对应于直觉上的色彩、明暗和色调。HSV广泛应用于色彩的比较。
OpenCV中的imshow()函数假设图像的颜色以RGB显示,因此其他显示均不正确。所以首先必须将其转换成RGB颜色空间
3.HLS:
HLS属于面向色度的颜色坐标系统中的一种,和之前的HSV类似
用来指定每个通道中的一种颜色的色度值、明暗值、饱和度值
与HSV不同的是HSL定义的一种纯颜色的亮度等于一种中等灰色的亮度
而HSV定义的一种纯颜色的亮度等于白色的亮度
4.YCrCb
该空间广泛用于视频和图像压缩,不能算作纯粹的色彩空间,它是RGB颜色空间的一种解码方式
Y通道表示亮度,而Cr和Cb表示红色差值(在RGB空间中R通道和Y的差值)和蓝色差值(在RGB空间中B通道和Y的差值)各自的色度分量。
5.灰度图
每个像素值只表示灰度信息这一单一信息
RGB[A]准换成灰度:Y=
0.299*R+
0.587*G+
0.114*
B
灰度转换为RGB[A]:R=Y,G=Y,B=Y,A=max(ChannelRange)
推文:【OpenCV】笔记(9)——色彩空间和颜色处理
6.YUV
推文:YUV格式分析
Y =
0.299R +
0.587G +
0.114B
U = -
0.147R -
0.289G +
0.436B
V =
0.615R -
0.515G -
0.100B
R = Y +
1.14V
G = Y -
0.
39U -
0.58V
B = Y +
2.
03U
7.色彩空间api相互转换
import cv2
as cv
def color_space_conv(image):
gray =
cv.cvtColor(image,cv.COLOR_BGR2GRAY) #RGB转灰度图
cv.imshow("gray",gray)
hsv =
cv.cvtColor(image,cv.COLOR_BGR2HSV) #RGB转HSV
cv.imshow("hsv",hsv)
yuv =
cv.cvtColor(image,cv.COLOR_BGR2YUV) #RGB转YUV
cv.imshow("yuv",yuv)
ycrcb =
cv.cvtColor(image,cv.COLOR_BGR2YCrCb)#RGB转YCrCb
cv.imshow("ycrcb",ycrcb)
hls =
cv.cvtColor(image,cv.COLOR_BGR2HLS) #RGB转HLS
cv.imshow("hls",hls)
src = cv.imread(
"./1.png") #读取图片
cv.namedWindow("RGB",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
cv.imshow("RGB",src) #通过名字将图像和窗口联系
t1 =
cv.getTickCount() #获取时间,用于精度计时,操作系统启动所经过(elapsed)的毫秒数
color_space_conv(src)
t2 =
cv.getTickCount()
print((t2-t1)/
cv.getTickFrequency()) #getTickFrequency()是获取一秒钟结果的点数,获取秒数
cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows() #销毁所有窗口
转载于:https://www.cnblogs.com/ssyfj/p/9260115.html