发布时间:2025-12-09 21:22:35 浏览次数:5
人眼看到不同频率的光会感受到不同的颜色,人们为了表示这些不同频率光线的色彩,就建立了各种色彩模型,这些色彩模型就称作色彩空间。
RGB/BGR色彩空间是基于三基色的;我们一般把一张彩色图像的色彩空间默认为是RGB色彩空间,但因为Opencv拆分一张彩色图像的通道默认顺序是 B→ G→ R,所以Opencv把一张彩色图像的色彩空间默认为BGR色彩空间。
GRAY色彩空间通常指的是灰度图像,灰度图像的像素被划分为256个灰度级别,每个像素为其中的一个级别。(前面也讲到过)
BGR色彩空间转换到GRAY色彩空间:dst = cvtColor(src, code);cv:指opencv,t:transform转变的意思,Color:色彩空间的意思。
参数说明:
实例:
1.Opencv也提供了cv2.COLOR_GRAY2BGR(从GRAY色彩空间转换到BGR色彩空间),虽然能转(转成的是三通道),但灰度图像是无法转换成彩色图像的,因为丢失了色彩的比例。
2.当BGR三个通道的值相等时,图像就是灰度图像,但同样,灰度图像是无法转换为彩色图像的。所以,有时候别人单通道灰度图像使用不方便时,就利用BGR色彩空间中的三通道形成的灰度图像。
HSV色彩空间是基于色调(hue)、饱和度(saturation)和亮度(value)的;
色调是指光的颜色,在[0, 180]内取值,例如红橙黄绿青蓝紫等;红绿蓝色调分别为0、60、120。
饱和度是指色彩的深浅,在[0, 255]内取值;0时,图像变为灰度图像。
亮度是指光的明暗,在[0, 255]内取值;0时,图像变为纯黑色。
HSV色彩空间转换到BGR色彩空间:dst = cvtColor(src, code)
参数说明:
实例:
语法格式:b, g, r = cv2.split(bgr_img)
参数说明:
实例:
会发现B、G、R三个通道显示的怎么是灰度图像呢?我看到有书上说是因为当程序执行到cv2.imshow("B", b)时,原图像B、G、R这3个通道的值都会被修改位B通道的值,即(b, b, b)。但作者个人觉得有问题,b.shape=(H, W)是个单通道图像,opencv对单通道图像默认按照灰度图像处理;当输入三通道图像即shape为(H, W, 3)时,opencv默认按照BGR图像处理。(H为垂直方向坐标,W为水平方向坐标)
语法格式:h, s, v = cv2.split(hsv_img)
参数说明:
实例:
要先将图像转换为HSV色彩空间!
合并通道其实就是拆分通道的逆过程。
语法格式:bgr_img = cv2.split([b, g, r])
参数说明:
实例:
merge()合并时,也可以更换b、g、r顺序。如上图img3窗口。
语法格式:hsv_img = cv2.split([h, s, v)
参数说明:
实例:
要对比原图的话,要将HSV色彩空间转换为BGR色彩空间。
opencv在BGR色彩空间的基础上,又增加了一个用来设置图像透明度的A通道,即alpha通道;这就构成了BGRA色彩空间。alpha在[0, 255]内取值,0为透明,255为不透明。
语法格式:bgra_img = cv2.split([b, g, r,a])
参数说明:
实例:
1.由上面两图可知,只有png文件可以保存alpha通道的信息!
2.使用BGRA色彩空间时,imshow()方法可能看不到效果,可以先保存下来再看。