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

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

在这里插入图片描述

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

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

相关文章

macOS 源码编译 Percona XtraBackup

percona-xtrabackup-2.4.28.tar.gz安装依赖 ╰─➤ brew install cmake ╰─➤ cmake --version cmake version 3.27.0brew 安装 ╰─➤ brew update╰─➤ brew search xtrabackup > Formulae percona-xtrabackup╰─➤ brew install percona-xtrabackup╰─➤ xtr…

scrcpy2.0+实时将手机画面显示在屏幕上并用鼠标模拟点击2023.7.26

想要用AI代打手游,除了模拟器登录,也可以直接使用第三方工具Scrcpy,来自github,它是一个开源的屏幕镜像工具,可以在电脑上显示Android设备的画面,并支持使用鼠标进行交互。 目录 1. 下载安装2. scrcpy的高级…

最常见的设计模式(代码示例)

文章目录 为什么要学习设计模式单例模式哪些地方使用单例模式懒汉模式和饿汉模式的区别单例的特性饿汉模式与懒汉模式的区别 工厂模式Spring 工厂模式创建Bean为什么Spring IOC要使用工厂设计模式创建Bean呢各个工厂模式的区别简单工厂(一个工厂生产不同的具体产品&…

Go语言开发小技巧易错点100例(八)

往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四)Go…

100多个常用快捷键

Ctrl A: 全选Ctrl C: 复制Ctrl V: 粘贴Ctrl X: 剪切Ctrl Z: 撤销Ctrl Y: 重做Ctrl S: 保存Ctrl P: 打印Ctrl F: 查找Ctrl H: 替换Ctrl G: 转到Ctrl N: 新建Ctrl O: 打开Ctrl W: 关闭窗口Ctrl Q: 退出程序Ctrl F1: 折叠/展开功能区Ctrl F5: 刷新Ctrl F7: 拼写…

【论文笔记】RCM-Fusion: Radar-Camera Multi-Level Fusion for 3D Object Detection

原文链接:https://arxiv.org/abs/2307.10249 1. 引言 目前的一些雷达-相机融合3D目标检测方法进行实例级的融合,从相机图像生成3D提案,并与雷达点云相关联以修正提案。但这种方法没有在最初阶段使用雷达,依赖于相机3D检测器&…

Spring中如何用注解方式存取JavaBean?有几种注入方式?

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE进阶 本篇文章将讲解如何在spring中使用注解的方式来存取Bean对象,spring提供了多种注入对象的方式,常见的注入方式包括 构造函数注入,Setter 方法注入和属性…

如何在局域网外SSH远程访问连接到家里的树莓派?

文章目录 如何在局域网外SSH远程访问连接到家里的树莓派?如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar4.2 cpolar进行token认证4.3 配置cpol…

Linux-free

free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。 1.命令格式: free [参数] 2.命令功能: free 命令显示系统使用和…

word图自动编号引用

一.引用,插入题注,新建标签,图1-,这样生成的就是图1-1这种,确定 再添加图片就点击添加题注就行,自动生成图1-2这种 二.图例保存为书签 插入,书签,书签命名,如图1 三…

Tensorflow(二)

一、过拟合 过拟合现象:机器对于数据的学习过于自负(想要将误差减到最小)。 解决方法:利用正规化方法 二、卷积神经网络(CNN) 卷积神经网络是近些年来逐渐兴起的人工神经网络,主要用于图像分类、计算机视觉等。 卷积:例如对图片每一小块像素区域的处理&#xff…

Centos7.9安全部署_防火墙配置_端口配置_协议配置_IP配置_全部亲测---记录022_大数据工作笔记0182

在我们平时搭建大数据平台的时候,由于防火墙的限制,会让搭建集群的时候,报各种错误,但是,有些网络环境要求比较严格的地方,防火墙又要求必须要放开,尤其是.. 有些网络环境会安全组进行定时扫描,说实话,我们用的很多开源软件,一般都是低版本的话都有漏洞,但是升级的话又会很容易…

vue2开发前的准备和注意事项

目录 注意事项 1、创建vue脚手架 2、项目启动 3、安装路由VueRouter 4、安装axios【需要自行安装】 5、安装vuex 6、安装ElementUI【自行安装】 7、打包【提交项目】 注意事项 components文件夹:主要写会重复用到的模块 views:写页面 文件命名格…

微信小程序分享页面代码

在微信小程序中实现分享功能需要以下几个步骤: 1. 在app.json文件中配置分享参数,例如标题、路径等。示例如下: json { "pages": [ "pages/index/index" ], "window": { "navigationBarTit…

sqlite触发器1

SQLite 的触发器(Trigger)可以指定在特定的数据库表发生 DELETE、INSERT 或 UPDATE 时触发,或在一个或多个指定表的列发生更新时触发。 SQLite 只支持 FOR EACH ROW 触发器(Trigger),没有 FOR EACH STATEM…

SpringBoot+Jpa+Thymeleaf实现增删改查

SpringBootJpaThymeleaf实现增删改查 这篇文章介绍如何使用 Jpa 和 Thymeleaf 做一个增删改查的示例。 1、pom依赖 pom 包里面添加Jpa 和 Thymeleaf 的相关包引用 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.…

VS构建项目报错信息及解决办法02

报错信息及解决3&#xff1a; 报错信息详情&#xff1a; fatal error C1083: 无法打开包括文件: “dirent.h”: No such file or directory 原因&#xff1a;项目为Linux环境下的&#xff0c;而在windows下VS中的MSVC并没有实现“dirent.h”头文件。 解决办法&#xff1a;自…

Ubuntu 20.04下的录屏与视频剪辑软件

ubuntu20.04下的录屏与视频剪辑 一、录屏软件SimpleScreenRecorder安装与使用 1、安装 2、设置录制窗口参数 3、开始录制 二、视频剪辑软件kdenlive的安装 1、安装 2、启动 一、录屏软件SimpleScreenRecorder安装与使用 1、安装 &#xff08;1&#xff09;直接在终端输入以下命…

DAY2,Qt(继续完善登录框,信号与槽的使用 )

1.继续完善登录框&#xff0c;当登录成功时&#xff0c;关闭登录界面&#xff0c;跳转到新的界面中&#xff0c;来回切换页面&#xff1b; ---mychat.h chatroom.h---两个页面头文件 #ifndef MYCHAT_H #define MYCHAT_H#include <QWidget> #include <QDebug> /…

P5721 【深基4.例6】数字直角三角形

【深基4.例6】数字直角三角形 题目描述 给出 n n n&#xff0c;请输出一个直角边长度是 n n n 的数字直角三角形。所有数字都是 2 2 2 位组成的&#xff0c;如果没有 2 2 2 位则加上前导 0 0 0。 输入格式 输入一个正整数 n n n。 输出格式 输出如题目要求的数字直…