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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSDN周赛65期简要题解

最近几期周赛里,貌似 Python 又变成 C 站的亲儿子了。输入形式是列表还不过瘾,现在输出形式也要求是列表,而且是连一个逗号、空格、中括号都不能少的 Python 标准列表形式。虽然对 Python 来说是信手拈来,但总要考虑一下其他编程语…

基于vue实现权限控制,动态渲染菜单栏

Vue菜单权限动态路由 实现原理:用户登录,服务端返回相关权限,进行持久化存储,筛选动态路由,同时菜单栏也需动态渲染 静态路由 静态路由,也叫常量路由,即所有角色都可以访问到的路由界面。如:…

chrome解决http自动跳转https问题

1.地址栏输入: chrome://net-internals/#hsts 2.找到底部Delete domain security policies一栏,输入想处理的域名,点击delete。 3.再次访问http域名不再自动跳转https了。

使用的华为云RDS数据库不小心把数据删了

目录 前言恢复qp文件帮助文档表级时间点恢复删除数据的时候要注意 前言 华为云查数据的时候前面是有个序号的,删除数据的时候不小心把序号看成id了,导致误删数据。 注:图片如果看不清楚可以点击放大观看! 恢复qp文件 华为云每天…

宋浩线性代数笔记(二)矩阵及其性质

更新线性代数第二章——矩阵,本章为线代学科最核心的一章,知识点多而杂碎,务必仔细学习。 重难点在于: 1.矩阵的乘法运算 2.逆矩阵、伴随矩阵的求解 3.矩阵的初等变换 4.矩阵的秩 (去年写的字,属实有点ugl…

推荐几个Windows iso镜像下载的网站

文章目录 1. 微软官网2. MSDN网站3. 系统库(xitongku)4. 其他网站最后总结 给大家推荐几个 Windows iso镜像下载网站 1. 微软官网 入口地址:https://www.microsoft.com/zh-cn/software-download 以下载Windows11为例: 1)找到下载Windows11…

Modbus RTU通信应用

一、功能概述 1.1 概述 Modbus串行通信协议是Modicon公司在1970年开发的。 Modbus串行通信协议有Modbus ASCII和Modbus RTU两种模式,Modbus RTU协议通信效率较高,应用更加广泛。 Modbus RTU协议是基于RS232和RS485串行通信的一种协议,数据通…

#Gitee 的 WebHooks 实现代码自动化部署#

1:安装git 2:php同步脚本 3:配置webhook 一&#xff1a;安装git服务 // 查看是否安装了git git --version// 如果未安装&#xff0c;执行安装命令 yum install git 2&#xff1a;编写同步PHP脚本 <?php //理发店钩子 error_reporting(1); set_time_limit(0); // 部署目…

MySQL-Explain简版

文章目录 前言1.什么是explain2.explain有什么用3.explain怎么用理解explain的列代表的意思id列select_type列table列partitions列type列possible_keys列key列key_len列ref列rows列Extra列 前言 没必要记吧&#xff0c;忘了直接查 1.什么是explain 在select语句之前增加explai…

C++面向对象三大特性 -- 多态(重点)

目录 一、什么是多态&#xff1f;二、多态的定义和实现2.1 虚函数2.2 虚函数的重写2.3 多态的构成条件2.4 C11中的override和final2.5 重写(覆盖)&#xff0c;重载&#xff0c;重定义(隐藏)的对比 三、多态的原理3.1 虚函数表3.2 再谈多态的条件3.3 动态绑定和静态绑定3.4 单继…

微分流形2:流形上的矢量场和张量场

来了来了&#xff0c;切向量&#xff0c;切空间。流形上的所有的线性泛函的集合&#xff0c;注意是函数的集合。然后取流形上的某点p&#xff0c;它的切向量为&#xff0c;线性泛函到实数的映射。没错&#xff0c;是函数到实数的映射&#xff0c;是不是想到了求导。我们要逐渐熟…

基于FPGA实现OSD功能

简介 基于FPGA平台实现简单的OSD的功能,对于FPGA实现OSD只能实行简单的画框和文字叠加,如果实现复杂的车道线画框,则没法实现(起码我个人感觉,这个功能没有思路执行)。 FPGA实现OSD功能需要7系列平台,以及VDMA、OSD等Xilinx公司的IP使用(本功能工程采用Vivado2017.4平台…

OSCP最新考试QA

枚举提示 初始枚举 对你的目标进行光线扫描。 例如&#xff0c;扫描您的考试机器上的10个常见端口。 在等待彻底和更长时间的扫描时&#xff0c;手动与找到的服务交互。 仔细列举 避免对多个目标进行大量扫描。 运行不安全扫描后还原计算机。 重新运行扫描以确保所有信…

【Unity3D日常开发】Unity3D中比较string字符串的常用方法

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 字符串string的比较有很多方法&#xff0c;比如&#xff1a; …

MongoDB原生语句更新嵌套数组的值

一、更新一层嵌套数组 首先执行MongoDB原生语句脚本在user集合中产生一些样本数据,如下所示: db.user.insert({"_id":1,"title":"爱情公寓3","students":[{"student_id":1001,"student_name":"林宛瑜&quo…

表单验证:输入的字符串以回车分隔并验证是否有

公司项目开发时&#xff0c;有一个需求&#xff0c;需要对输入的字符串按回车分隔并验证是否有重复项&#xff0c;效果如下&#xff1a; 表单代码&#xff1a; <el-form-item label"IP地址条目&#xff1a;" prop"ipAddressEntry"><el-inputtype&…

计算机内存中的缓存Cache Memories

这篇写一下计算机系统中的缓存Cache应用场景和实现方式介绍。 Memory hierarchy 在讲缓存之前&#xff0c;首先要了解计算机中的内存结构层次Memory hierarchy。也就是下图金字塔形状的结构。 从上到下&#xff0c;内存层次结构如下&#xff1a; 寄存器&#xff1a;这是计算机…

FPGA_学习_13_方差计算小模块

测距器件APD的性能与器件本身的温度、施加在APD的偏置电压息息相关。 在不同的温度下&#xff0c;APD的偏压对测距性能的影响非常大。 要确定一个合适的APD的偏压Vopt&#xff0c;首先你要知道当前温度下&#xff0c;APD的击穿电压Vbr&#xff0c;一般来讲&#xff0c;Vopt Vb…

桥梁安全生命周期监测解决方案

一、方案背景 建筑安全是人们生产、经营、居住等经济生活和人身安全的基本保证&#xff0c;目前我国越来越多的建筑物逐 步接近或者已经达到了使用年限&#xff0c;使得建筑物不断出现各种安全隐患&#xff0c;对居民的人身安全和财产安全产 生不利影响&#xff0c;因此房…

gitee 配置ssh 公钥(私钥)

步骤1&#xff1a;添加/生成SSH公钥&#xff0c;码云提供了基于SSH协议的Git服务&#xff0c;在使用SSH协议访问项目仓库之前&#xff0c;需要先配置好账户/项目的SSH公钥。 绑定账户邮箱&#xff1a; git config --global user.name "Your Name" git config --glob…