opencv-21 alpha 通道详解(应用于 图像增强,合成,蒙版,特效 等)

什么是alpha 通道?

Alpha通道是计算机图形学中用于表示图像透明度的一种通道。在一个图像中,通常会有三个颜色通道:红色(R)、绿色(G)、蓝色(B),它们合在一起形成彩色图像。而Alpha通道是第四个通道,用于描述每个像素的透明度信息。

Alpha通道的取值范围通常是从0到255,其中0代表完全透明(即该像素完全不可见),255代表完全不透明(即该像素完全可见),其他取值则表示不同程度的透明度。透明度表示了一个像素在叠加到其他像素时的混合程度,从而实现了图像的透明效果。

使用Alpha通道,可以在图像中创建复杂的形状、边缘和阴影,同时也允许图像和背景之间的无缝融合。这在图像处理、计算机游戏、视频合成等领域中非常有用。常见的图像文件格式,如PNG、TIFF,以及某些编辑软件如Adobe Photoshop,都支持Alpha通道的使用。

应用场景:

Alpha通道在计算机图形学和图像处理中有许多应用场景,以下是其中一些常见的应用:

图像透明度:最常见的用途是在图像或图形中创建透明效果。通过调整Alpha通道的值,可以使图像的某些区域变得半透明或完全透明,从而实现图像的融合和叠加效果。

图像剪裁:使用Alpha通道可以将图像中的一部分裁剪掉,只保留感兴趣的区域,被裁剪掉的区域会使用透明度来表示。

图像合成:将具有Alpha通道的图像叠加到其他图像上时,Alpha通道可以控制图像的透明度,从而实现图像的无缝融合。

阴影和光照效果:在3D图形渲染中,Alpha通道可用于模拟阴影和光照效果。通过在Alpha通道中定义透明度,可以控制光线的透过程度,从而实现更真实的阴影和光照效果。

图像特效:Alpha通道可以用于添加各种图像特效,如模糊、发光、辉光等。通过调整Alpha通道的值,可以控制特效的强度和透明度。

2D游戏精灵:在2D游戏中,Alpha通道常用于创建带有透明背景的游戏精灵,使其可以在游戏场景中自然地叠加和移动。

图像蒙版:Alpha通道可以用于创建图像蒙版,通过透明度来控制图像的可见部分,从而实现图像的遮罩效果。

总的来说,Alpha通道为图像处理提供了更多的灵活性和创造力,使得图像在合成、叠加和处理时更加逼真和自然

实验:分析 alpha 通道的值。

import cv2
import numpy as np
#模拟生成一个3通道的彩色图像
img=np.random.randint(0,256,size=[2,3,3],dtype=np.uint8)
#将img转换为BGRA格式
bgra = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)

print("img=\n",img)
print("bgra=\n",bgra)

print("img.shape=\n",img.shape)
print("bgra.img.shape=\n",bgra.shape)

#分离通道
b,g,r,a=cv2.split(bgra)
#打印alpha通道的值
print("a=\n",a)
#修改alpha通道的值
a[:,:]=125
#合并通道
bgra=cv2.merge([b,g,r,a])
#打印新的bgra
print("bgra2 =\n",bgra)

在本例中,使用语句 bgra=cv2.cvtColor(img,cv2.COLOR_BGR2BGRA)将 img 从 BGR 色

彩空间转换到 BGRA 色彩空间。在转换后的 BGRA 色彩空间中,A 是 alpha 通道,默认值为255。

接下来,分别使用打印语句打印原始图像 img 的值和转换后的图像 bgra 的值。

然后,使用语句 a[:,:]=125 将从 bgra 中提取的 alpha 通道的值设定为 125,并使用语句bgra=cv2.merge([b,g,r,a])构建一个新的 bgra 图像。

在本步骤中,使用 cv2.merge()函数将新的 alpha

通道与原有的 BGR 通道进行合并,得到一个新的图像。从另外一个角度理解就是,本步骤实现了将 bgra 图像中 alpha 通道的值更改为 125

运行程序,结果如下所示。

img=
 [[[143 121 141]
  [ 15   4 109]
  [ 93  76  48]]

 [[  5   9 156]
  [220  42 209]
  [156 248 177]]]
bgra=
 [[[143 121 141 255]
  [ 15   4 109 255]
  [ 93  76  48 255]]

 [[  5   9 156 255]
  [220  42 209 255]
  [156 248 177 255]]]
img.shape=
 (2, 3, 3)
bgra.img.shape=
 (2, 3, 4)
a=
 [[255 255 255]
 [255 255 255]]
bgra2 =
 [[[143 121 141 125]
  [ 15   4 109 125]
  [ 93  76  48 125]]

 [[  5   9 156 125]
  [220  42 209 125]
  [156 248 177 125]]]

实验2:对图像的 alpha 通道进行处理

代码如下:

import cv2
img=cv2.imread("lena.png")
bgra = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
b,g,r,a=cv2.split(bgra)
a[:,:]=125
bgra125=cv2.merge([b,g,r,a])
a[:,:]=0
bgra0=cv2.merge([b,g,r,a])
cv2.imshow("img",img)
cv2.imshow("bgra",bgra)
cv2.imshow("bgra125",bgra125)
cv2.imshow("bgra0",bgra0)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite("bgra.png", bgra)
cv2.imwrite("bgra125.png", bgra125)
cv2.imwrite("bgra0.png", bgra0)

运行结果:

从上面运行结果中,首先从当前目录下读取文件 lena.png,然后将其进行色彩空间变换,将其

由 BGR 色彩空间转换到 BGRA 色彩空间,得到 bgra,即为原始图像 lena 添加 alpha 通道。

接下来,分别将提取得到的 alpha 通道的值设置为 125、0,并将新的 alpha 通道与原有的

BGR 通道进行组合,得到新的 BGRA 图像 bgra125、bgra0。

接着,分别显示原始图像、原始 BGRA 图像 bgra、重构的 BGRA 图像 bgra125 和 bgra0。

最后,将 3 个不同的 BGRA 图像保存在当前目录下。

运行程序,显示的图像如图 所示。图中:

 图(a)是原始图像 lena。

 图(b)是由原始图像 lena 通过色彩空间转换得到的图像 bgra,该图像内 alpha 通道的值是

默认值 255。

 图©是将图像 bgra 中 alpha 通道值设置为 0 得到的。

 图(d)是将图像 bgra 中 alpha 通道值设置为 125 得到的。

从图中可以看到,各个图像的 alpha 通道值虽然不同,但是在显示时是没有差别的。

但是保存后再打开图片的效果是不一样的。

相关推荐
起名字什么的好难11 分钟前
conda虚拟环境安装pytorch gpu版
人工智能·pytorch·conda
18号房客18 分钟前
计算机视觉-人工智能(AI)入门教程一
人工智能·深度学习·opencv·机器学习·计算机视觉·数据挖掘·语音识别
百家方案20 分钟前
「下载」智慧产业园区-数字孪生建设解决方案:重构产业全景图,打造虚实结合的园区数字化底座
大数据·人工智能·智慧园区·数智化园区
云起无垠26 分钟前
“AI+Security”系列第4期(一)之“洞” 见未来:AI 驱动的漏洞挖掘新范式
人工智能
QQ_77813297444 分钟前
基于深度学习的图像超分辨率重建
人工智能·机器学习·超分辨率重建
清 晨1 小时前
Web3 生态全景:创新与发展之路
人工智能·web3·去中心化·智能合约
X_StarX1 小时前
数据可视化期末复习-简答题
计算机视觉·信息可视化·数据挖掘·数据分析·数据可视化·大学生·期末
公众号Codewar原创作者1 小时前
R数据分析:工具变量回归的做法和解释,实例解析
开发语言·人工智能·python
阿勉要睡觉1 小时前
计算机图形学知识点汇总
计算机视觉
IT古董2 小时前
【漫话机器学习系列】020.正则化强度的倒数C(Inverse of regularization strength)
人工智能·机器学习