opencv色彩空间类型转换(python)
色彩空间类型转换 颜色模型是一种抽象的数学模型,它描述了使用一组值(通常是三个或四个值或颜色分量)来表示颜色的方法。 常见的色彩空间包括: 灰度色彩空间(灰度图像) XYZ色彩空间 色彩空间哭泣 HSV色彩空间 HLS色彩空间 CIELab色彩空间 CIELuv色彩空间 拜耳色彩空间等 颜色空间类型转换是指将图像从一种颜色空间转换为另一种颜色空间。 使用 OpenCV 处理图像时,可以在 RGB
色彩空间类型转换
颜色模型是一种抽象的数学模型,它描述了使用一组值(通常是三个或四个值或颜色分量)来表示颜色的方法。
常见的色彩空间包括:
-
灰度色彩空间(灰度图像)
-
XYZ色彩空间
-
色彩空间哭泣
-
HSV色彩空间
-
HLS色彩空间
-
CIELab色彩空间
-
CIELuv色彩空间
-
拜耳色彩空间等
颜色空间类型转换是指将图像从一种颜色空间转换为另一种颜色空间。
使用 OpenCV 处理图像时,可以在 RGB 颜色空间和 HSV 颜色空间之间进行转换。
在图像特征提取和距离计算的过程中,往往将图像从RGB色彩空间处理到灰度色彩空间。
在某些应用中,可能需要将色彩空间中的图像转换为二值图像。
色彩空间也称为色彩空间、色彩空间、色彩模型、色彩系统、色彩模型、色彩模型等。
色彩空间基础
灰色色彩空间
GRAY(GRAY 图像)通常是指 8 位 GRAY 图像,有 256 个 GRAY 级别,像素值范围为 [0255]。
当图像从RGB色彩空间转换到GRAY色彩空间时,处理方法如下:
灰色u003d0.299*R+0.587*G+0.114*B
当图像从 GREY 颜色空间转换为 RGB 颜色空间时,所有通道的最终值将相同。处理方法如下:
Ru003d灰色
Gu003d灰色
Bu003d灰色
XYZ色彩空间
XYZ 色彩空间由 CIE(国际照明委员会)定义。它是一种可计算性更强的色彩空间,可以用RGB色彩空间进行转换。
将 RGB 颜色空间转换为 XYZ 颜色空间,形式为:
将 XYZ 颜色空间转换为 RGB 颜色空间,形式为:
YCrCb 色彩空间
人类视觉系统(HVS)对颜色的敏感度低于对亮度的敏感度。
在YCrCb色彩空间中,Y代表光源的亮度,色度信息存储在Cr和Cb中,其中CR代表红色成分信息,Cb代表蓝色成分信息。
亮度给出了颜色明暗的程度信息,可以通过光照中强度分量的加权和来计算。在 RGB 光源中,绿色分量影响最大,蓝色分量影响最小。
RGB色彩空间到YCrCb色彩空间的转换公式为:
Yu003d0.299·R+0.587·G+0.114·B
Cru003d(R-Y)×0.713+delta
Cbu003d(B-Y)×0.564+delta
其中 delta 的值为:
YCrCb 颜色空间到 RGB 颜色空间的转换公式为:
Ru003dY+1.403*(Cr-delta)
Gu003dY-0.714*(Cr-delta)-0.344·(Cb-delta)
Bu003dY+1.773*(Cb-delta)
其中,delta的值与上式相同。
HSV色彩空间
RGB是从硬件角度提出的颜色模型。在与人眼匹配的过程中可能存在一些差异。 HSV颜色空间是视觉感知的颜色模型
指出人眼对色彩的感知主要包括三个要素:色相、饱和度和色度。
色相是指光的颜色,饱和度是指颜色的深浅,亮度是指人眼感受到的光的亮度。
● 色调:色调与混合光谱中的主光波长有关。例如,“红、橙、黄、绿、青、蓝、紫”分别代表不同的色调。事实上,从不同的波长来看,它们反射出不同的颜色。
● 饱和度:指相对纯度,或白光与一种颜色混合的量。纯光谱颜色完全饱和。深红色(红色加白色)和淡紫色(紫色加白色)等颜色饱和度不足,饱和度与添加的白光量成反比。
● 亮度:反映人眼感受到的光的明暗,与物体的反射率有关。对于颜色,如果混入的白色越多,它的亮度就越高;如果混入的黑色越多,它的亮度就越低。
1、物理空间的颜色分布在圆周上,不同的角度代表不同的颜色。因此可以通过调整hue值来选择不同的颜色,hue的取值范围是[0,360]
1、饱和度是[0,1]范围内的一个比例值,具体是所选颜色的纯度值与该颜色的最大纯度值的比值。当saturation的值为0时,只有灰度。
2、Brightness表示颜色的明暗程度,取值范围也是[0, 1]。
在从RGB颜色空间转换到HSV颜色空间之前,需要先将RGB颜色空间的值转换为[0,1]再进行处理。具体处理方法如下:
计算结果可能是 h < 0。如果出现这种情况,需要进一步计算 H,如下所示。
根据上面的公式:
S∈[0,1]
V∈[0,1]
H∈[0,360]
所有这些转换都封装在 OpenCV 的 CV2 里面的 cvtcolor() 函数中。通常我们直接调用这个函数来完成色彩空间的转换,而不考虑函数内部的实现细节。
HLS色彩空间
HLS色彩空间包含三个元素:Hue H(色调)、Lightness L(明度)和Saturation S(饱和度)。
与 HSV 颜色空间类似,只有 H L S 颜色空间将“值”替换为“亮度”。
● 色相:代表人眼感知的颜色。在 HLS 模型中,所有颜色都分布在一个扁平的色调环上。整个色相环是一个360度的中心角,不同的角度代表不同的颜色
● 亮度/明度:用于控制颜色的明暗变化,取值范围也是[0, 1]。我们通过亮度/亮度来测量从物体表面反射多少光。亮度/明度对于眼睛感知颜色非常重要,因为当有颜色的物体处于光线过强或过暗的地方时,眼睛无法准确感知物体的颜色。
● 饱和度:用[0,1]的值来描述在相同的色相和亮度/明度下颜色纯度的变化。饱和度值越高,颜色的纯度越高,颜色越亮;相反,饱和度值越小,颜色的纯度越低,颜色越深。这个属性通常用来表示颜色的深浅,比如深绿色和浅绿色。
CIELab * 颜色空间
CIEL*a*b*颜色空间是一个统一的颜色空间模型,是一种视觉感知的颜色模型。
从视觉感知均匀性的角度来看,两种颜色的差异应该与颜色空间中两种颜色之间的距离成正比。在一个颜色空间中,如果人们观察到的两种颜色之间的差异与颜色空间中两种颜色对应点之间的欧几里得距离成正比,则该颜色空间称为均匀颜色空间。
CIEL*a*b * 颜色空间中的 L * 分量用于表示像素的亮度。取值范围为[0100],表示从纯黑到纯白;一个*分量表示从红色到绿色的范围,取值范围为[- 127127]; B*分量表示从黄色到蓝色的范围,取值范围为[- 127127]。
在从RGB色彩空间转换为CIEL*a*b*色彩空间之前,先将RGB色彩空间的值转换为[0,1],然后进行处理。
由于CIEL*a*b*色彩空间是在CIE的XYZ色彩空间的基础上发展起来的,所以在具体处理中,需要先将RGB转换为XYZ色彩空间,再转换为CIEL*a*b\ * 色彩空间。具体实现方法如下:
! zoz100076](https://programming.vip/images/doc/42bd4520937c0175af3c75124a3207c2.jpg)
得到的结果中每个值的取值范围为:
L∈[0,100]
a∈[-127,127]
b∈[-127,127
CIELuv * 颜色空间
CIEL*u*v * 颜色空间,和 CIEL*a*b * 颜色空间一样,是一个统一的颜色模型。 CIEL*u*v * 色彩空间与设备无关。根据加色原理,适合显示和组合。该模型强调红色的表示,即对红色的变化更敏感,而对蓝色的变化不太敏感。
从RGB颜色空间到CIEL*u*v*颜色空间的转换过程需要先转换到XYZ颜色空间。
从 RGB 颜色空间到 XYZ 颜色空间的转换:
从 XYZ 颜色空间到 CIEL*u*v * 颜色空间的转换:
所得结果中各个值的取值范围为:
L∈[0,100]
u∈[-134,220]
v∈[-140,122]
拜耳色彩空间
拜耳色彩空间(拜耳模型)广泛用于 CCD 和 CMOS 相机。它可以从如图4-1 所示的单平面R、G、B 交错表中获得彩色图像。
! zwz 100085 zwz 100086 zwz 100084
根据当前点1、2或4个邻域像素的同色像素值得到输出RGB图像的像素值。
可以通过向左或上方移动一个像素来修改上述模式。
在函数 CV2 的 cvtcolor() 的颜色空间转换参数中,通常使用两个具体的参数 x 和 y 来表示具体的模式。
模式组成由上图第二行第 2 列和第 3 列的值指定。上图是典型的“BG”模式。
常见的模式有很多,CV2 COLOR_BayerBG2BGR,cv2.COLOR_BayerGB2BGR,cv2.COLOR_BayerRG2BGR,cv2.COLOR_BayerGR2BGR,cv2.COLOR_BayerBG2RGB,cv2.COLOR_BayerGB2RGB,cv2.COLOR_BayerRG2RGB,cv2。颜色_BayerGR2RGB 等。
类型转换函数
在 OpenCV 中,使用 CV2 的 Cvtcolor() 函数实现色彩空间的变换。
该功能可以实现多种色彩空间之间的转换。
dst u003d cv2.cvtColor(src, 代码 [, dstCn] )
-
dst 表示输出图像,与原始输入图像具有相同的数据类型和深度。
-
src 代表原始输入图像。它可以是 8 位无符号图像、16 位无符号图像或单精度浮点数。
-
代码为色彩空间转换代码
! swz 100103 swz 100104 swz 100102
- dstCn 是目标图像的通道数。如果参数默认为0,则从原始输入图像和代码中自动获取通道数。
对于标准的 24 位位图,BGR 颜色空间中的前 8 位(第一个字节)存储蓝色分量,第二个 8 位(第二个字节)存储绿色分量,第三个 8 位(第三个字节)存储红色组件。同理,第 4、5、6 个字节分别存储蓝色、绿色和红色的成分信息,以此类推。
以下约定用于颜色空间的转换:
-
8位图像取值范围为[0255]。
-
16位图像值的范围是[065535]。
-
浮点图像取值范围为[0.0 ~ 1.0]。
对于线性变换,这些值范围无关紧要。但是,对于非线性转换,必须将输入的 RGB 图像归一化到其对应的取值范围,才能得到正确的转换结果。
解释:
-
对于8个位图,可以表示28u003d256个灰度级,即在8个位图中,最多可以表示256个状态,通常是[0255]之间的值。但是,在许多颜色空间中,值的范围并不完全在 [0255] 的范围内。这时候需要将值映射到[0255]的范围内。
-
在 HSV 或 HLS 颜色空间中,色调值通常在 [0360] 范围内。 8位图转换为上述颜色空间后,色相值除以2,使其取值范围变为[0180],以满足存储范围,即使数值分布在该范围内[0255] 可以用 8 个位图表示。再举个例子,在CIELab*色彩空间中,通道a和通道b的取值范围是[- 127127]。为了使其适应[0255]的范围,每个值都应该加上127。但是需要注意的是,由于计算过程中四舍五入,转换过程是不准确和可逆的。
类型转换实例
- 将BGR图像转换为灰度图像。
rstu003dcv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
导入 cv2
将 numpy 导入为 np
imgu003dnp.random.randint(0,256, sizeu003d[2,4,3], dtypeu003dnp.uint8)
rstu003dcv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
打印(“图像u003d\in”,img)
打印(“rstu003d\n”,rst)
print("像素点(1,0)直接计算值u003d",
img[1,0,0]*0.114+img[1,0,1]*0.587+img[1,0,2]*0.299)
print("像素点(1,0)使用公式cv2.cvtColor()转换值u003d", rst[1,0])
在 OpenCV 中,灰度图像是直接按照行和列存储的。 BGR模式下的图像会依次将B通道、G通道和R通道的像素以行为单位存储在ndarray的列中。
! swz 100106 swz 100107 swz 100105
当图像从RGB色彩空间转换到GRAY色彩空间时,处理方法如下:
灰色u003d0.299·R+0.587·G+0.114·B
- 灰度图转BGR图
导入 cv2
将 numpy 导入为 np
imgu003dnp.random.randint(0,256, 大小u003d[2,4], dtypeu003dnp.uint8)
rstu003dcv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
打印(“图像u003d\in”,img)
打印(“rstu003d\n”,rst)
当图像从 GREY 颜色空间转换到 RGB/BGR 颜色空间时,所有通道的最终值是相同的。治疗方法如下:
Ru003d灰色
Gu003d灰色
Bu003d灰色
- 在 BGR 和 RGB 模式之间转换图像
导入 cv2
将 numpy 导入为 np
imgu003dnp.random.randint(0,256, sizeu003d[2,4,3], dtypeu003dnp.uint8)
rgbu003dcv2.cvtColor(img, cv2.COLOR_BGR2RGB)
bgru003dcv2.cvtColor(rgb, cv2.COLOR_RGB2BGR)
打印(“图像u003d\in”,img)
打印(“rgbu003d\n”,rgb)
打印(“bgru003d\n”,bgr)
- 将图像在BGR模式和灰度图像之间转换
导入 cv2
lenau003dcv2.imread("lenacolor.png")
灰色u003dcv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)
rgbu003dcv2.cvtColor(灰色, cv2.COLOR_GRAY2BGR)
#u003du003du003du003du003du003du003du003du003du003d打印形状u003du003du003du003du003du003du003du003du003du003du003du003du003d
打印(“lena.shapeu003d”,lena.shape)
打印(“gray.shapeu003d”,gray.shape)
打印(“rgb.shapeu003d”,rgb.shape)
#u003du003du003du003du003du003du003du003du003du003d显示效果u003du003du003du003du003du003du003du003du003du003du003du003d
cv2.imshow(“莉娜”,莉娜)
cv2.imshow(“灰色”,灰色)
cv2.imshow("rgb", rgb)
cv2.waitKey()
cv2.destroyAllWindows()
在“rgbu003dcv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)”得到的RGB图像中,通道B、通道G和通道R的值是一样的,所以看起来还是灰度图。
- 图像从BGR模式转换为RGB模式
导入 cv2
lenau003dcv2.imread("lenacolor.png")
rgb u003d cv2.cvtColor(lena, cv2.COLOR_BGR2RGB)
cv2.imshow(“莉娜”,莉娜)
cv2.imshow("rgb", rgb)
cv2.waitKey()
cv2.destroyAllWindows()
HSV色彩空间讨论
通过HSV色彩空间,更方便的通过色相、饱和度和亮度来感知色彩。
HSV色彩空间从心理学和视觉的角度提出,人眼的色彩感知主要包括三个要素
-
H:色相(hue,又称色相)。
-
S:饱和度。
-
5:亮度(值)。
色相H
在 HSV 颜色空间中,色调 H 的取值范围为 [0360]。
8位图像中的每个像素点可以表示28u003d256个灰度级,所以在8位图像中表示HSV图像时,色调的角度值应该映射到[0255]的范围内。用二进制除以[018]的角度,可以将[018]的值直接存入[018]的范围内,得到色调。
在 HSV 空间中,色调值为 0 表示红色,色调值为 300 表示洋红色
! swz 100109 swz 100110 swz 100108
每个色相值对应一个指定的颜色,与饱和度和亮度无关。
在OpenCV中,色调值除以2后,会得到如下色调值和对应的颜色。
饱和度 S
饱和度值的范围是[0,1]
-
灰色中包含的R、G、B的分量相等,相当于一种极不饱和的颜色。因此,灰色的饱和度值为 0。
-
显示为灰度图时,较亮区域对应的颜色饱和度较高。
-
如果一种颜色的饱和度很低,那么计算出来的色相是不可靠的。
cv2.cvtColor() 函数。颜色空间转换后,为了适应8位图的256像素级别,需要将新颜色空间中的值映射到[0255]的范围内。因此,饱和度S的值也应该从[0,1]的范围映射到[0255]的范围。
亮度V
亮度范围与饱和度范围一致,均为[0,1]。同样,OpenCV 中的亮度值也将值映射到 [0255] 的范围内。
亮度值越高,图像越亮;亮度值越低,图像越暗。当亮度值为 0 时,图像为纯黑色。
获取指定颜色
HSV颜色空间中RGB颜色空间的颜色值对应的值可以通过多种方式获得。例如,RGB值对应的HSV值可以通过图片编辑软件或在线网站获取。
需要注意的是,从RGB/BGR颜色空间转换到HSV颜色空间时,opencv会映射HSV空间的值,以满足8位图的要求。因此,通过软件或网站获得的HSV值需要进一步映射以与OpenCV中的HSV值保持一致
例子
分别转换蓝、绿、红三种不同颜色,将它们从BGR颜色空间转换为HSV颜色空间,观察转换后的HSV空间对应的值。
导入 cv2
将 numpy 导入为 np
#u003du003du003du003du003du003du003du003du003d在OpenCV中测试蓝色HSV模式值u003du003du003du003du003du003du003du003du003du003du003du003du003d
imgBlueu003dnp.zeros([1,1,3], dtypeu003dnp.uint8)
imgBlue[0,0,0]u003d255
蓝色u003dimgBlue
BlueHSVu003dcv2.cvtColor(蓝色, cv2.COLOR_BGR2HSV)
打印(“蓝色u003d\n”,蓝色)
打印(“BlueHSVu003d\n”,BlueHSV)
#u003du003du003du003du003du003du003du003du003d在OpenCV中测试绿色HSV模式值u003du003du003du003du003du003du003du003du003du003du003du003du003d
imgGreenu003dnp.zeros([1,1,3], dtypeu003dnp.uint8)
imgGreen[0,0,1]u003d255
绿色u003dimgGreen
GreenHSVu003dcv2.cvtColor(绿色, cv2.COLOR_BGR2HSV)
打印(“绿色u003d\n”,绿色)
打印(“GreenHSVu003d\n”,GreenHSV)
#u003du003du003du003du003du003du003du003du003d在OpenCV中测试红色HSV模式值u003du003du003du003du003du003du003du003du003du003du003du003du003d
imgRedu003dnp.zeros([1,1,3], dtypeu003dnp.uint8)
imgRed[0,0,2]u003d255
红色u003dimgRed
RedHSVu003dcv2.cvtColor(红色, cv2.COLOR_BGR2HSV)
打印(“红色u003d\n”,红色)
打印(“RedHSVu003d\n”,RedHSV)
指定标签的颜色
在 HSV 颜色空间中,H 通道(saturation Hue 通道)对应不同的颜色。从另一个角度看,颜色的不同主要体现在H通道值的不同上。因此,可以通过过滤H通道的值来过滤掉特定的颜色。
在HSV图像中,如果控制只显示H通道中值为240的像素(在OpenCV中调整为120),则图像中只会显示蓝色部分。
您可以屏蔽图像中的其他颜色并仅显示特定颜色。
1.通过inRange函数锁定一个特定的值
OpenCV通过函数CV2 Inrange()判断图像中像素的像素值是否在指定范围内。它的语法格式是:
dst u003d cv2.inRange(src,lowerb,upperb)
● dst 表示输出结果,大小与src 一致。
● src 表示要检查的数组或图像。
● lowerb 表示范围的下限。
● upperb 表示范围的上限。
返回值 dst 和 src 大小相等。取值取决于src中对应位置的值是否在区间[lowerb, upperb]内:
● 如果 src 值在指定区间内,则 dst 中对应位置的值为 255。
● 如果 src 值不在指定区间内,则 dst 中对应位置的值为 0。
使用函数 CV2 Inrange() 标记图像中 [100200] 内的值。
导入 cv2
将 numpy 导入为 np
imgu003dnp.random.randint(0,256, sizeu003d[5,5], dtypeu003dnp.uint8)
最小u003d100
最大值u003d200
掩码 u003d cv2.inRange(img, min, max)
打印(“图像u003d\in”,img)
打印(“掩码u003d\n”,掩码)
返回的结果掩码可以理解为掩码数组,其大小与原数组一致。
2.通过基于掩码的按位显示ROI
图像中的感兴趣区域 (ROI) 正常显示,而其余区域显示为黑色。
-
提取一个颜色区间,其半径通常为10左右
-
HSV模式下通道S和通道V的取值范围一般为[100255]。这主要是因为当饱和度和亮度太低时,计算的色调可能不可靠。
-
各种颜色的HSV区间值分布在[h-10100100]和[H + 10255255]之间。
导入 cv2
将 numpy 导入为 np
opencvu003dcv2.imread("opencv.jpg")
hsv u003d cv2.cvtColor(opencv, cv2.COLOR_BGR2HSV)
cv2.imshow('opencv', opencv)
#u003du003du003du003du003du003du003du003du003du003du003du003du003d指定蓝色值的范围u003du003du003du003du003du003du003du003du003du003du003du003du003d
minBlue u003d np.array([110,50,50])
maxBlue u003d np.array([130,255,255])
#确定蓝色区域
掩码 u003d cv2.inRange(hsv, minBlue, maxBlue)
#蓝色区域通过掩码控制的按位和运算锁定
蓝色 u003d cv2.bitwise_and(opencv, opencv, masku003d mask)
cv2.imshow('蓝色',蓝色)
#u003du003du003du003du003du003du003du003du003du003du003du003du003d指定绿色值的范围u003du003du003du003du003du003du003du003du003du003du003du003du003d
minGreen u003d np.array([50,50,50])
maxGreen u003d np.array([70,255,255])
#识别绿色区域
掩码 u003d cv2.inRange(hsv, minGreen, maxGreen)
#绿色区域通过掩码控制按位和运算锁定
绿色 u003d cv2.bitwise_and(opencv, opencv, masku003d mask)
cv2.imshow('绿色',绿色)
#u003du003du003du003du003du003du003du003du003du003du003du003du003d指定红色值的范围u003du003du003du003du003du003du003du003du003du003du003du003du003d
minRed u003d np.array([0,50,50])
maxRed u003d np.array([30,255,255])
#识别红色区域
掩码 u003d cv2.inRange(hsv, minRed, maxRed)
#红色区域通过掩码控制的按位和运算锁定
红色u003d cv2.bitwise_and(opencv,opencv,掩码u003d掩码)
cv2.imshow('红色',红色)
cv2.waitKey()
cv2.destroyAllWindows()
标记肤色
通过分析可以估计出HSV颜色空间中肤色的范围值。通过对HSV空间中肤色范围内的值进行过滤,可以提取出图像中包含肤色的部分。
导入 cv2
imgu003dcv2.imread("lesson2.jpg")
hsv u003d cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, vu003dcv2.split(hsv)
minHueu003d5
最大色调u003d170
hueMasku003dcv2.inRange(h, minHue, maxHue)
minSatu003d25
最大卫星u003d166
satMask u003d cv2.inRange(s, minSat, maxSat)
面膜 u003d HuiMask & TrueMask
roi u003d cv2.bitwise_and(img, img, masku003d mask)
cv2.imshow(“img”,img)
cv2.imshow(“投资回报率”,鞭子)
cv2.waitKey()
cv2.destroyAllWindows()
达到艺术效果
在 HSV 颜色空间中调整分量值可以产生一些有趣的效果
将V通道的值改为255,观察图像处理结果。
导入 cv2
imgu003dcv2.imread("barbara.bmp")
hsv u003d cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, vu003dcv2.split(hsv)
v[:, :]u003d255
newHSVu003dcv2.merge([h, s, v])
艺术 u003d cv2.cvtColor(newHSV, cv2.COLOR_HSV2BGR)
cv2.imshow(“img”,img)
cv2.imshow(“艺术”,艺术)
cv2.waitKey()
cv2.destroyAllWindows()
阿尔法通道
在RGB色彩空间的三个通道的基础上,可以添加一个A通道,也称为alpha通道,来表示透明度。
这种四通道颜色空间称为 RGBA 颜色空间。 PNG图像是典型的四通道图像。 alpha通道的赋值范围是[0,1],或者[0,255],表示从透明到不透明。
导入 cv2
将 numpy 导入为 np
imgu003dnp.random.randint(0,256, 大小u003d[2,3,3], dtypeu003dnp.uint8)
bgra u003d cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
打印(“图像u003d\in”,img)
打印(“bgrau003d\n”,bgra)
b, g, r, au003dcv2.split(bgra)
打印("au003d\n", a)
a[:, :]u003d125
bgrau003dcv2.merge([b, g, r, a])
打印(“bgrau003d\n”,bgra)
使用语句 BGRA u003d CV2 Cvtcolor (IMG, CV2. Color_bgr2BGRA) 将 img 从 BGR 颜色空间转换为 BGRA 颜色空间。在转换后的 BGRA 颜色空间中,A 为 alpha 通道,默认值为 255。
处理图像的alpha通道
导入 cv2
imgu003dcv2.imread("lenacolor.png")
bgra u003d cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
b, g, r, au003dcv2.split(bgra)
a[:, :]u003d125
bgra125u003dcv2.merge([b, g, r, a])
a[:, :]u003d0
bgra0u003dcv2.merge([b, g, r, a])
cv2.imshow(“img”,img)
cv2.imshow("bgra", bgra)
cv2.imshow("bgra125", bgra125)
cv2.imshow("bgr a0", bgr a0)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite("bgra.png", bgra)
cv2.imwrite("bgra125.png", bgra125)
cv2.imwrite("bgra0.png", bgra0)
虽然每张图像的 alpha 通道值不同,但在显示上没有区别。
打开当前文件夹,可以看到当前文件夹中保存了三张图片,各不相同。
需要注意的是,当图像 bgra0 处于预览模式时,它可能看起来像黑色图像。当你打开它时,你会看到它实际上是实心透明的。
更多推荐
所有评论(0)