Opencv图像色彩空间与通道
Posted ZGPing@
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Opencv图像色彩空间与通道相关的知识,希望对你有一定的参考价值。
文章目录
1.色彩空间
人眼看到不同频率的光会感受到不同的颜色,人们为了表示这些不同频率光线的色彩,就建立了各种色彩模型,这些色彩模型就称作色彩空间。
1-1.RGB/BGR色彩空间
RGB/BGR色彩空间是基于三基色的;我们一般把一张彩色图像的色彩空间默认为是RGB色彩空间,但因为Opencv拆分一张彩色图像的通道默认顺序是 B→ G→ R,所以Opencv把一张彩色图像的色彩空间默认为BGR色彩空间。
1-2.GRAY色彩空间
GRAY色彩空间通常指的是灰度图像,灰度图像的像素被划分为256个灰度级别,每个像素为其中的一个级别。(前面也讲到过)
-
BGR色彩空间转换到GRAY色彩空间:
dst = cvtColor(src, code)
;cv:指opencv,t:transform转变的意思,Color:色彩空间的意思。 -
参数说明:
- dst:转换后的图像。
- src:转换前的图像(原图像)。
- code:色彩空间转换码。
-
实例:
1.Opencv也提供了
cv2.COLOR_GRAY2BGR
(从GRAY色彩空间转换到BGR色彩空间),虽然能转(转成的是三通道),但灰度图像是无法转换成彩色图像的,因为丢失了色彩的比例。2.当BGR三个通道的值相等时,图像就是灰度图像,但同样,灰度图像是无法转换为彩色图像的。所以,有时候别人单通道灰度图像使用不方便时,就利用BGR色彩空间中的三通道形成的灰度图像。
1-3.HSV色彩空间
HSV色彩空间是基于色调(hue)、饱和度(saturation)和亮度(value)的;
色调是指光的颜色,在[0, 180]内取值,例如红橙黄绿青蓝紫等;红绿蓝色调分别为0、60、120。
饱和度是指色彩的深浅,在[0, 255]内取值;0时,图像变为灰度图像。
亮度是指光的明暗,在[0, 255]内取值;0时,图像变为纯黑色。
-
HSV色彩空间转换到BGR色彩空间:
dst = cvtColor(src, code)
-
参数说明:
- dst:转换后的图像。
- src:转换前的图像(原图像)。
- code:色彩空间转换码。
-
实例:
2.通道
2-1.拆分通道:split()
方法
1.拆BGR色彩空间图像的通道
-
语法格式:
b, g, r = cv2.split(bgr_img)
-
参数说明:
- b:B通道图像(像素)。
- g:G通道图像(像素)。
- r:R通道图像(像素)。
- bgr_img:一张BGR色彩空间图像。
-
实例:
会发现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为水平方向坐标)
2.拆HSV色彩空间图像的通道
-
-
语法格式:
h, s, v = cv2.split(hsv_img)
-
参数说明:
- h:h通道图像(像素)。
- s:s通道图像(像素)。
- v:v通道图像(像素)。
- hsv_img:一张hsv色彩空间图像。
-
实例:
要先将图像转换为HSV色彩空间!
-
2-2.合并通道:merge()
方法
合并通道其实就是拆分通道的逆过程。
1.B、G、R 通道的合并
-
语法格式:
bgr_img = cv2.split([b, g, r])
-
参数说明:
- b:B通道图像(像素)。
- g:G通道图像(像素)。
- r:R通道图像(像素)。
- bgr_img:合并后的一张BGR色彩空间图像。
-
实例:
merge()合并时,也可以更换b、g、r顺序。如上图img3窗口。
2.H、S、V 通道的合并
-
语法格式:
hsv_img = cv2.split([h, s, v)
-
参数说明:
- h:h通道图像(像素)。
- s:s通道图像(像素)。
- v:v通道图像(像素)。
- hsv_img:合并后的一张hsv色彩空间图像。
-
实例:
要对比原图的话,要将HSV色彩空间转换为BGR色彩空间。
3.B、G、R、A 通道的合并
opencv在BGR色彩空间的基础上,又增加了一个用来设置图像透明度的A通道,即alpha通道;这就构成了BGRA色彩空间。alpha在[0, 255]内取值,0为透明,255为不透明。
-
语法格式:
bgra_img = cv2.split([b, g, r,a])
-
参数说明:
- b:B通道图像(像素)。
- g:G通道图像(像素)。
- r:R通道图像(像素)。
- a:A通道图像(像素)。
- bgra_img:合并后的一张BGRA色彩空间图像。
-
实例:
1.由上面两图可知,只有png文件可以保存alpha通道的信息!
2.使用BGRA色彩空间时,imshow()方法可能看不到效果,可以先保存下来再看。
以上是关于Opencv图像色彩空间与通道的主要内容,如果未能解决你的问题,请参考以下文章
opencv converTO()函数 转换图像的数据类型不改变通道数,注意与cvtColor()改变颜色空间/彩色空间/色彩空间函数区分
OpenCV RGB直方图计算与绘制----calcHist()函数normalize()函数