第7章:图像合成与透明处理

图像合成与透明处理是图像处理中十分重要的操作,特别适合用于创建叠加效果、图像拼接、透明水印等。在 Pillow 中,借助透明通道和图像的不同模式,可以轻松实现图像的合成和透明处理。

1.1 图像合成基础

在 Pillow 中,图像合成通常是通过 Image 模块的 paste() 方法或 alpha_composite() 方法完成的。

1.1.1 paste() 方法

paste() 方法允许将一张图像粘贴到另一张图像上。粘贴位置可以指定为特定坐标,同时也可以指定掩码图像来控制透明度。

from PIL import Image

# 加载底图和叠加图
background = Image.open("background.jpg")
overlay = Image.open("overlay.png")

# 在指定位置粘贴overlay到background上
background.paste(overlay, (50, 50), overlay)
background.show()

案例:在背景图像上叠加水印

通过 paste() 方法可以将水印叠加到图像的角落位置,形成简单的水印效果。


1.2 图像混合 (blend)

blend 函数可以将两张图像按指定的透明度比例混合在一起,适用于创建过渡效果。

# 加载两张图像
image1 = Image.open("image1.jpg")
image2 = Image.open("image2.jpg")

# 将两张图像以50%的透明度混合
blended_image = Image.blend(image1, image2, alpha=0.5)
blended_image.show()

案例:创建叠加过渡效果

在制作双重曝光效果时,可以将两张图像按不同透明度比例混合,以形成独特的视觉效果。


1.3 Alpha 通道与透明度

在处理透明图像时,RGBA 模式的图像支持 Alpha 通道,用来控制每个像素的透明度。Alpha 通道的值范围为 0(完全透明)到 255(完全不透明)。

# 将RGB图像转换为RGBA
rgba_image = image.convert("RGBA")

# 修改Alpha通道
data = rgba_image.getdata()
new_data = [(r, g, b, 128) for r, g, b, a in data]  # 设置50%透明度
rgba_image.putdata(new_data)
rgba_image.show()

案例:将图像转换为半透明

在制作 UI 元素时,可以通过调整 Alpha 通道来生成半透明效果,使得背景内容能够透过。


1.4 使用透明掩码进行合成

透明掩码可以帮助我们控制图像的合成区域,例如将部分图像设置为透明区域,仅显示需要的部分。

# 创建透明掩码
mask = Image.open("mask.png").convert("L")

# 使用掩码将overlay叠加到background上
background.paste(overlay, (0, 0), mask)
background.show()

案例:生成不规则的透明效果

通过透明掩码,可以实现复杂的图像合成效果,例如仅显示图像的特定区域,适合用于图标设计等场景。


1.5 图像通道操作

在 Pillow 中可以通过 split() 方法将图像的 R、G、B、A 通道分开。每个通道可以独立操作,然后通过 merge() 方法重新组合。

# 分离通道
r, g, b, a = rgba_image.split()

# 操作通道,例如将红色通道增加亮度
r = r.point(lambda i: i * 1.2)

# 合并通道
modified_image = Image.merge("RGBA", (r, g, b, a))
modified_image.show()

案例:增强特定色彩

可以通过操作单个颜色通道来实现色彩强化,例如提高红色通道的亮度,生成带有暖色调的图像。


1.6 图像遮罩 (alpha_composite)

alpha_composite() 方法可以直接使用两个 RGBA 图像,按 Alpha 通道自动合成,适合需要精确控制透明度的场景。

# 加载图像并确保是RGBA模式
foreground = Image.open("foreground.png").convert("RGBA")
background = Image.open("background.jpg").convert("RGBA")

# 使用alpha_composite合成
combined = Image.alpha_composite(background, foreground)
combined.show()

案例:制作图片透明叠加效果

在制作海报或图像蒙版效果时,可以通过 alpha_composite 实现平滑的透明叠加效果,保持图像边缘的自然过渡。


1.7 制作半透明水印

半透明水印可以在图像的角落或中心添加,以保护版权或标识内容来源。

# 创建带Alpha通道的文本水印
watermark = Image.new("RGBA", image.size, (0, 0, 0, 0))
draw = ImageDraw.Draw(watermark)
draw.text((10, 10), "Watermark", fill=(255, 255, 255, 128))  # 半透明白色

# 叠加水印
watermarked_image = Image.alpha_composite(image.convert("RGBA"), watermark)
watermarked_image.show()

案例:生成带透明水印的图片

在图像的指定位置添加半透明水印,可以有效地保护内容,且不影响图像的观赏性。


1.8 复合操作:剪切与拼接

在处理大图拼接和裁剪时,复合操作非常实用。例如,Pillow 支持将图像切割成多个小块并重新组合。

# 裁剪图像为左、右两部分
left_part = image.crop((0, 0, image.width // 2, image.height))
right_part = image.crop((image.width // 2, 0, image.width, image.height))

# 拼接两个部分
new_image = Image.new("RGB", (image.width, image.height))
new_image.paste(right_part, (0, 0))
new_image.paste(left_part, (image.width // 2, 0))
new_image.show()

案例:镜像拼接效果

在一些特效处理时,可以将图像的左右、上下部分进行对换或镜像,以创造独特的视觉效果。


1.9 综合案例:制作自定义图像蒙版

本案例展示如何创建自定义蒙版,并利用 Alpha 通道合成出带有透明渐变边缘的图像效果。

# 加载图像并生成渐变蒙版
foreground = Image.open("foreground.jpg").convert("RGBA")
mask = Image.new("L", foreground.size)
for y in range(mask.height):
    for x in range(mask.width):
        mask.putpixel((x, y), int(255 * (y / mask.height)))  # 垂直渐变透明

# 应用蒙版
foreground.putalpha(mask)

# 将图像叠加到背景上
background = Image.open("background.jpg").convert("RGBA")
combined_image = Image.alpha_composite(background, foreground)
combined_image.show()

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

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

相关文章

数据库范式、MySQL 架构、算法与树的深入解析

一、数据库范式 在数据库设计中,范式是一系列规则,用于确保数据的组织和存储具有良好的结构、完整性以及最小化的数据冗余。如果不遵循范式设计,数据可能会以平铺式罗列,仅使用冒号、分号等简单分隔。这种方式存在诸多弊端&#…

Leetcode 存在重复元素II

这段代码的算法思想可以用以下步骤来解释: 算法思想 使用哈希表(HashMap)存储每个元素的索引: 遍历数组 nums 时,使用一个 HashMap 来记录每个元素的值和它的索引位置。这样可以快速查找之前出现过的相同元素的索引。…

Vue3.js - 一文看懂Vuex

1. 前言 Vuex 是 Vue.js 的官方状态管理库,用于在 Vue 应用中管理组件之间共享的状态。Vuex 适用于中大型应用,它将组件的共享状态集中管理,可以避免组件间传递 props 或事件的复杂性。 2. 核心概念 我们可以将Vuex想象为一个大型的Vue&…

面试编程题目(一)细菌总数计算

题目如图: 第一题: import lombok.AllArgsConstructor; import lombok.Data;import java.util.Arrays; import java.util.Collections; import java.util.List;/*** description: 细菌实体类* author: zhangmy* Version: 1.0* create: 2021-03-30 11:2…

基于Qt/C++与OpenCV库 实现基于海康相机的图像采集和显示系统(工程源码可联系博主索要)

本文将梳理一个基于 Qt 和 OpenCV 实现的海康相机图像采集 Demo。该程序能够实现相机连接、参数设置、图像采集与显示、异常处理等功能,并通过 Qt 界面展示操作结果。 1. 功能概述 该程序使用 Qt 的 GUI 作为界面,OpenCV 作为图像处理库,通…

网络基础Linux

目录 计算机网络背景 网络发展 认识 "协议" 网络协议初识 OSI七层模型 TCP/IP五层(或四层)模型 网络传输基本流程 网络传输流程图 ​编辑 数据包封装和分用 网络中的地址管理 认识IP地址 认识MAC地址 笔记(画的图) 协议&#x…

大数据新视界 -- 大数据大厂之 Impala 存储格式转换:从原理到实践,开启大数据性能优化星际之旅(下)(20/30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

性能调优专题(12)之垃圾收集器ParNewCMS与底层三色标记算法详解

一、垃圾收集算法 1.1 分代收集理论 当前虚拟机的垃圾收集器都采用分代收集理论,只是根据对象存活周期的不同将内存分为几块。一般Java将堆分为新生代和老年代,这样子我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比如在新生代中,每…

JAVA学习日记 ArrayList+LinkedList+迭代器源码分析

一、ArrayList 底层原理: ①利用空参构造的集合,在底层创建一共默认长度为0的数组 ②添加第一个元素时,底层会创建一个新的长度为10的数组 ③存满时,会扩容1.5倍 ④如果一次添加多个元素,1.5倍放不下,…

python+pptx:(二)添加图片、表格、形状、模版渲染

目录 图片 表格 合并单元格 填充色、边距 写入数据 形状 模版渲染 上一篇:pythonpptx:(一)占位符、文本框、段落操作_python输出ppt母版占位符标号-CSDN博客 from pptx import Presentation from pptx.util import Cm, In…

RDIFramework.NET CS敏捷开发框架 V6.1发布(.NET6+、Framework双引擎、全网唯一)

RDIFramework.NET C/S敏捷开发框架V6.1版本迎来重大更新与调整,全面重新设计业务逻辑代码,代码量减少一半以上,开发更加高效。全系统引入全新字体图标,整个界面焕然一新。底层引入最易上手的ORM框架SqlSugar,让开发更加…

力扣经典面试题

1.本题的目标是判断字符串ransomNote是否由字符串magazine中的字符构成,且由magazine中的每个字符只能在ransomNote中使用一次 2.采用的方法是通过一个字典cahr_countl来统计magazine字符串中每个字符出现的次数 3.然后遍历ransomNote字符串,对于其中的…

安卓aosp15手机上如何离线获取winscope文件

背景: 针对winscope在aosp14高版本的抓取环境搭建问题,前面文章已经给大家一篇业界独家干货文章: android 14版本的winscope编译使用-手把手教你编译成功不报错 这篇文章搭建的winscope的方式同样适用于aosp15版本,只需要使用最新…

【机器学习入门】(1) 线性回归算法

学习目标: 线性回归是一种基本的统计学习方法,主要用于分析一个或多个自变量与因变量之间的线性关系。以下是关于线性回归的一些关键点:线性回归的四要素: (1)假设(hypothesis);(2&…

基于MATLAB身份证号码识别

课题介绍 本课题为基于连通域分割和模板匹配的二代居民身份证号码识别系统,带有一个GUI人机交互界面。可以识别数十张身份证图片。 首先从身份证图像上获取0~9和X共十一个号码字符的样本图像作为后续识别的字符库样本,其次将待测身份证图像…

嵌入式硬件实战提升篇(一)-泰山派RK3566制作多功能小手机

引言:主要针对于嵌入式全栈内容的知识点汇总并对于linux等相关驱动知识点进行串联,用大家参考学习,并用到了嘉立创提供的泰山派RK3566作为学习的主控。 实物演示如下所示: 目录 一、硬件设计 1.转接电路 2.背光电路 3.音频接…

springboot餐厅点餐系统-计算机设计毕业源码14189

目 录 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 餐厅点餐系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 餐厅点餐系统…

制造业7大模式:智能制造、协同制造、绿色制造等思维导图详解

在当今快速变化的市场环境中,制造业正迎来前所未有的变革。从智能工厂的高效运作到网络化制造的全球协同,从云制造的资源共享到3D打印的个性化定制,这些前沿制造模式正在重新定义生产方式,提升企业的竞争力。 今天给大家分享最前沿…

加速 AI 创新:引入 Elastic AI 生态系统

作者:来自 Elastic Alyssa Fitzpatrick, Steve Kearns 生成式人工智能 (Generative AI - GenAI) 正在改变我们所熟知的商业格局。为了简化和加速开发人员构建和部署检索增强生成 (retrieval augmented generation - RAG) 应用程序的方式,Elastic 自豪地宣…

centos rich 美观打印日志

文章目录 步骤 1: 安装 Python 和 pip步骤 2: 安装 rich-cli步骤 3: 验证安装步骤 4: 使用 rich-cli参考 在 CentOS 上安装 rich-cli 工具,你可以按照以下步骤进行操作。rich-cli 是一个命令行工具,用于将 rich 库的功能(例如美化输出&#x…