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

news2024/11/24 19:17:40

什么是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 通道值虽然不同,但是在显示时是没有差别的。

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786423.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将Parasoft和ChatGPT相结合会如何?

ChatGPT是2023年最热门的话题之一,是OpenAI训练的语言模型。它能够理解和生成自然语言文本,并接受过大量数据的训练,包括用各种编程语言编写的许多开源项目的源代码。 软件开发人员可以利用大量的知识库来协助他们的工作,因为它具…

网络安全高级课笔记1

HTML字符编码/HTML实体编码 html实体编码 unicode urlcode 在字符的十六进制前加百分号(%),用于浏览器的网址输入框 utf-8 字符数字表示法 HTML允许使用Nuicode码点表示字符,浏览器会自动将码点转成对应的字符。 字符的码点表…

vtk能否被OpenGL和DirectX取代?

VTK(Visualization Toolkit)是一个强大的开源可视化库,用于处理和呈现各种科学数据。它建立在OpenGL和DirectX等底层图形库之上,提供了高级的可视化功能和算法。虽然OpenGL和DirectX可以用于图形渲染和实时图形处理,但…

数据结构--线性表2-1

目录 一、线性结构的定义 二、线性表的表示 三、顺序表的实现(或操作) 1、修改: 2、插入: 四、顺序表的运算效率分析:时间效率分析: 一、线性结构的定义 若结构时非空有限集,则有且仅有一个…

python爬虫基础入门——利用requests和BeautifulSoup

(本文是自己学习爬虫的一点笔记和感悟) 经过python的初步学习,对字符串、列表、字典、元祖、条件语句、循环语句……等概念应该已经有了整体印象,终于可以着手做一些小练习来巩固知识点,写爬虫练习再适合不过。 1. 网页基础 爬虫的本质就是从网页中获取所需的信息,对网…

优化帮助与支持中心,提升客户满意度

在竞争激烈的商业环境中,提供良好的客户体验和有效的支持服务是企业获得成功的关键因素之一。优化帮助与支持中心的设计和运营对于提升客户满意度至关重要。本文将探讨如何通过优化帮助与支持中心来提升客户满意度,并为企业带来更多的商业机会。 提供多…

2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析

以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病(以下简称慢性病)已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变,慢性病的患病率持续攀升。众所周知,健康状况与年龄、饮食习惯、…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 25 日论文合集)

文章目录 一、分割|语义相关(17篇)1.1 Semi-Supervised Medical Image Segmentation with Co-Distribution Alignment1.2 CTVIS: Consistent Training for Online Video Instance Segmentation1.3 SL: Stable Learning in Source-Free Domain Adaption for Medical Image Segme…

16_LinuxLCD驱动

目录 Framebuffer设备 LCD驱动简析 LCD驱动程序编写 LCD屏幕参数节点信息修改 LCD 屏幕背光节点信息 使能Linux logo显示 设置LCD作为终端控制台 Framebuffer设备 先来回顾一下裸机的时候LCD驱动是怎么编写的,裸机LCD驱动编写流程如下: 1.初始化I.MX6U的eLCDIF控制器,…

【代码随想录day19】找树左下角的值

题目 思路 这题最直观的方法就是用层序遍历,记录一下每一层的左边第一个节点,这样整个层序遍历一遍就能找到最后一行最左边的节点。这里要注意最左边的节点不一定是父节点的左子节点!!!如果最后一行没有左子节点&…

M5ATOMS3基础01按键

initinputoutput Linux环境Arduino IDE中配置ATOM S3 示例 官方示例代码: /* ******************************************************************************* * Copyright (c) 2022 by M5Stack * Equipped with M5AtomS3 sample source c…

Redis过期策略和内存淘汰策略

过期策略 过期策略是指Redis设置过期时间且key已经到达过期时间时删除该key,一般有定期删除和惰性删除; 定期删除是指每隔固定时间扫描key,对已经过期的key做清除操作; 定期删除时并不会实际对key做全量扫描,而是随机…

数字时代下CIO们如何做到业务增长和安全“双手抓”

7月22日,由福建信息主管(CIO)网主办的品牌企业业务增长与CIO进化之道暨福建CIO网20周年(厦门)产业数字化供需见面会在厦门顺利举办。 作为国内云原生安全领导厂商,安全狗也收到邀请出席此次活动。 厦门服云信息科技有限公司&…

Python实战案例:轻松采集微博评论,揭示网络舆论热点!

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 模块使用: requests: 发送请求 parsel: 解析数据 jieba pandas stylecloud 第三方模块安装: win R 输入cmd 输入安装命令 pip install 模块名 (如果你…

Android平台如何实现第三方模块编码后(H.264/H.265/AAC/PCMA/PCMU)数据实时预览播放

技术诉求 我们在做GB28181设备对接模块和RTMP直播推送模块的时候,遇到这样的技术需求,设备(如执法记录仪)侧除了采集传统的摄像头外,还需要对接比如大疆等第三方数据源,确保按照GB28181规范和RTMP协议规范…

使用百度地图SDK计算距离

说明:通过百度地图提供的SDK,可以计算出两个地点之间的距离,另外还有行驶路线等等。本文介绍如果使用百度地图SDK,并用java代码实现。 申请 首先需要登录百度地图的官网,申请开发者认证,个人认证一般都很…

装饰模式-扩展系统功能

买了新车后,不少人会对车进行装饰,比如给车贴膜,喷上骚粉的漆等。某天,小李和小张都买了辆车,小李想给车贴膜,小张想给车先喷漆然后再贴膜。现在中的做法是,把车开到改装店,如果要喷…

统一观测丨使用 Prometheus 监控 Cassandra 数据库最佳实践

作者:元格 本篇内容主要包括四部分:Cassandra 概览介绍、常见关键指标解读、常见告警规则解读、如何通过 Prometheus 建立相应监控体系。 Cassandra 简介 Cassandra 是什么? Apache Cassandra 是一个开源、分布式、去中心化、弹性可伸缩、…

day44-Spring_AOP

0目录 1.2.3 1.Spring_AOP 实体类: Mapper接口: Service和实现类: 测试1: 运行后: 测试2:无此型号时 测试3:库存不足时 解决方案1:事务声明管理器 测试&#xff1a…

【从零开始学习JAVA | 第三十篇】方法引用

前言: 方法引用作为一个重要的知识点,虽然他使用起来很复杂,而且会降低代码的可读性,但是如果用好了方法引用,我们也会获得不错的效率,因此我们在今天将为大家讲解什么是方法引用。 方法引用:…