Pillow教程03:图像处理的基本步骤+分离split+合并merge+混合blend+composite遮罩

--------------Pillow教程集合---------------

Python项目18:使用Pillow模块,随机生成4位数的图片验证码

Python教程93:初识Pillow模块(创建Image对象+查看属性+图片的保存与缩放)

Pillow教程02:图片的裁剪+复制粘贴+旋转角度+翻转+降噪滤镜(平滑、锐化、边缘检测)

Pillow教程03:图像处理的基本步骤+分离split+合并merge+混合blend+composite遮罩

Pillow教程04:学习Draw绘制+Font字体+alpha composite方法,给图片添加文字水印

Pillow教程05:NumPy数组和PIL图像的相互转化

1.Pillow处理图像的基本步骤

环境准备:安装Pillow库。这通常通过在终端执行pip install pillow命令来完成。导入必要的模块和类,例如Image类,这是Pillow模块中最重要的类之一。
打开和加载图像:使用Image.open()方法打开图像文件。加载图像到内存中,准备进行后续处理。
图像预处理:根据需要,对图像进行裁剪、缩放、旋转、翻转等操作。应用滤镜效果,如模糊、锐化等,以改善图像质量或实现特定视觉效果。
颜色空间转换与图像增强:如果需要,将图像从一种颜色空间转换到另一种(例如,从RGB转换到灰度)。应用图像增强技术,如对比度增强、亮度调整等,以突出图像中的特定特征或改善整体视觉效果。
图像分割与合并:使用Image.split()方法将图像拆分为不同的颜色通道或图层。使用Image.merge()方法将多个单波段图像或图层合并成一个新的多波段图像或完整图像。
图像混合与透明度调整:使用Image.blend()方法混合两张图像,通过调整alpha值来控制图像的混合程度。
保存和处理结果:对处理后的图像进行保存,可以使用Image.save()方法将图像保存到文件。根据需要,对处理结果进行进一步的分析、显示或传输。
这些步骤并不是固定的,具体的处理流程取决于你的图像处理需求和目标。Pillow库提供了丰富的功能和灵活的API,可以根据具体的应用场景来选择合适的处理方法和步骤。

2.image.split()方法:用于将图像分割为多个通道列表。对于RGB图像,会创建三个新的图像对象。每个对象都包含原始图像的一个颜色通道(红色、绿色、蓝色)的副本,你可以对这些通道进行进一步的处理或分析。语法格式如下:

r, g, b = image.split()

3.Image.merge()方法:用于将多个图像(通常是颜色通道)合并成一个新的图像。它需要两个参数:一个模式字符串(如’RGB’)和一个包含要合并的图像的元组。

分割+合并示例用法1:一张RGB图像的三个单独通道(红、绿、蓝)
在这里插入图片描述

# -*- coding: utf-8 -*-
# @Author : 小红牛
# 微信公众号:WdPython
from PIL import Image
import matplotlib.pyplot as plt# 1.打开图像
img = Image.open('刘亦菲.png')
# 处理图片:裁剪、旋转、翻转、滤镜# 2.将图像拆分为RGB通道
r, g, b = img.split()# 3.合并通道
merged_image = Image.merge('RGB', (g, b, r))# 2.创建5个子图的图形
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文显示
plt.rcParams['axes.unicode_minus'] = False  # 解决符号无法显示
fig, axs = plt.subplots(nrows=1, ncols=5, figsize=(10, 3))# 在第一个子图上,显示第1张图片
axs[0].imshow(img)
axs[0].set_title('原图')
axs[0].axis('off')# 第2张图
axs[1].imshow(r)
axs[1].set_title('r图')
axs[1].axis('off')# 第3张图
axs[2].imshow(g)
axs[2].set_title('g图')
axs[2].axis('off')# 第4张图
axs[3].imshow(b)
axs[3].set_title('b图')
axs[3].axis('off')# 第5张图
axs[4].imshow(merged_image)
axs[4].set_title('merged方法,合并的图')
axs[4].axis('off')
# 4.显示图形
plt.show()

分割+合并示例用法2:多个图层或效果叠加的图像
在这里插入图片描述

from PIL import Image# 1.打开图1和图2
image1 = Image.open('刘亦菲.png')
image2 = Image.open('白鹿.png')
# 2.因为两种图片的图片格式一致,所以仅需要处理图片的大小,让它们保持一致
# 让 image2 的图像尺寸与 image1 一致,注意此处新生成了 Image 对象
resized_image = image2.resize(image1.size)
# 3.接下来,对图像进行颜色分离操作
r1, g1, b1 = image1.split()
r2, g2, b2 = resized_image.split()
# 4.合并图像
image3 = Image.merge('RGB', [r2, g1, b2])
image3.save('new_image.png')

4.Image.blend():用于将两个图像混合在一起,根据指定的alpha值来决定每个图像在混合结果中的贡献程度。alpha值范围从0(完全第一个图像)到1(完全第二个图像),当取值=0.5时,为两个图像的中合,因此该值的大小决定了两个图像的混合程度。

Image.blend(image1,image2, alpha)

在这里插入图片描述

# @Author : 小红牛
# 微信公众号:WdPython
from PIL import Image# 1.打开两张图像
image1 = Image.open('刘亦菲.png')
image2 = Image.open('白鹿.png')# 2.确保两张图像大小相同
resized_image = image2.resize(image1.size)
# 混合两张图像,alpha值为0.5(各占一半)
blended_image = Image.blend(resized_image, image1, 0.5)
# 3.保存处理后的图片
blended_image.save('new_image2.png')

5.Image.composite,用于将两张图片通过透明蒙版,进行遮罩混合处理,创建出一张新的合成图像。PIL.Image.composite(image1, image2, mask)。

image1 是第一张图片,通常作为背景。
image2 是第二张图片,通常作为前景,需要被放置在 image1 上。
mask是一个遮罩图像,它决定了 image2 在合成图像中的哪些部分应该是可见的,哪些部分应该是透明的。遮罩图像可以具有模式“1”,“L”或“RGBA”,并且必须与其他两个图像具有相同的大小。

准备两张图片素材
在这里插入图片描述
在这里插入图片描述
合成后的效果
在这里插入图片描述


from PIL import Image# 1.打开背景图片和前景图片
image1 = Image.open('花园.png')
image2 = Image.open('猫女.png')# 2.确保前景图片与背景图片大小一致
image1 = image1.resize(image2.size)
r, g, b = image1.split()# 使用 Image.composite 方法合成图片  
# 3.这将根据遮罩图像(mask)将前景图片(foreground)合成到背景图片(background)上
composited = Image.composite(image2, image1, mask=r)# 4.如果需要,可以将合成后的图片保存为文件
composited.save('composited.png')

完毕!!感谢您的收看

----------★★历史博文集合★★----------

我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具 NumPy Pygame 图像处理

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

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

相关文章

烫烫烫手的结构体大小计算来咯,很烫哦,慢慢消化。自定义类型(一)

emmm,在这炎热的夏天在宿舍吹着空调写着博客也是一件不错的事呢,今天就来来好好盘一下C语言中的自定义类型。 常常会回顾努力的自己,所以要给自己的努力留下足迹。 为今天努力的自己打个卡,留个痕迹吧 2024.03.29 小闭 目录 …

C++项目——集群聊天服务器项目(九)客户端异常退出业务

服务器端应检测到客户端是否异常退出,因此本节来实现客户端异常退出,项目流程见后文 一、客户端异常退出业务流程 (1)在业务模块定义处理客户端异常退出的函数 (2)集群聊天服务器项目(八)提到…

为什么在Python中总是使用【字典】这种类型呢?

你好,我是安然无虞。 文章目录 创建字典新增字典元素update 方法 删除字典元素pop 方法popitem 方法 查找字典元素in 和 in not 操作符get 方法thisdict[key] 修改字典元素遍历字典元素for循环遍历keys方法values方法items方法 合并字典字典中的key 字典常用接口汇…

网际协议 - IP

文章目录 目录 文章目录 前言 1 . 网际协议IP 1.1 网络层和数据链路层的关系 2. IP基础知识 2.1 什么是IP地址? 2.2 路由控制 3. IP地址基础知识 3.1 IP地址定义 3.2 IP地址组成 3.3 IP地址分类 3.4 子网掩码 IP地址分类导致浪费? 子网与子网掩码 3.5 CIDR与…

自己动手用ESP32手搓一个智能机器人:ESP32-CAM AI Robot

目录 介绍 硬件需求 软件需求 步骤 总结 源码下载 介绍 ESP32-CAM是一款集成了Wi-Fi和蓝牙功能的微控制器模块,同时还集成了摄像头接口,使其成为一个非常适合构建智能机器人的选择。在本项目中,我将向您展示如何使用ESP32-CAM模块构建…

数据运营分析-详解

一、指标与指标体系 指标体系就是业务逻辑的框架,也是思考业务逻辑的第一步 案例: 老板,我负责的用户活跃,主要考察每天启动产品的注册用户数量,整体来看,每月活跃保持7.3%的增长,是因为渠道团队的拉新活动带来很多新增注册用户,占每月活跃用户的40%,新一年会继续沿…

消息队列的七种经典应用场景

在笔者心中,消息队列,缓存,分库分表是高并发解决方案三剑客。 在职业生涯中,笔者曾经使用过 ActiveMQ 、RabbitMQ 、Kafka 、RocketMQ 这些知名的消息队列 。 这篇文章,笔者结合自己的真实经历,和大家分享…

Linux项目自动化构建工具-make/ makefile及其应用:多文件编写第一个linux程序:进度条(懒人学习必备博文!!!)

目录 1.前言--make/makefile的引入 2.快速上手make/makefile---自动化构建 3.关于依赖关系和依赖方法 4.自动化清理 为什么我们执行编译的时候,make一下就好,清理却要使用make clean? 5. make/makefile是如何知道当前目录下可执行文件是否为最新 6.文件…

express实现用户登录和注册接口

目录 1 创建数据库2 连接数据库3 集成ORM库4 创建业务逻辑5 创建路由7 测试接口总结 我们在编写后端接口的时候操作数据库是一种常见的功能需求,express本身并不提供直接操作数据库的能力,需要借助第三方库来操作数据库,本篇讲解一下软件开发…

【二叉树】Leetcode 543. 二叉树的直径【简单】

二叉树的直径 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例1: 输入:root [1,2…

基于SpringBoot + Vue实现的在线装修管理系统设计与实现+毕业论文

介绍 系统包含用户、装修队、管理员三个角色 管理员: 管理员管理:管理其他管理员的账号和权限,确保系统管理的层次化和安全性。 装修队管理:审核装修队的资质,管理装修队的人员信息,监控工程进度&#xff…

elementUI this.$msgbox msgBox自定义 样式自定义 富文本

看这个效果是不是很炫?突出重点提示内容,对于用户交互相当的棒! 下来说说具体实现: let self = this const h = self.$createElement; this.$msgbox({title: null,message: h("p", {style: "margin-top:10px"}, [h("i", {class: "el-i…

命名空间【C++】(超详细)

文章目录 命名空间的概念命名空间的定义命名空间定义的位置作用域每一个命名空间都是一个独立的域作用域符:: 编译器找一个变量/函数等的定义,寻找域的顺序为什么要有命名空间?1.解决库与程序员定义的同名的重定义问题2.解决程序员…

【氮化镓】p-GaN栅极退化的温度和结构相关性

论文总结: 本文献深入研究了带有p-GaN栅极的正常关断型(normally-off)高电子迁移率晶体管(GaN-HEMTs)在恒定电压应力下的时序退化行为。通过直流特性分析和温度依赖性分析,研究了故障时间(TTF)与应力温度和器件几何结构的依赖性。结果显示,p…

FME学习之旅---day17

我们付出一些成本,时间的或者其他,最终总能收获一些什么。 【FME-HOW-TO系列】28 栅格邻域函数 RasterConvolver转换器说明: 接受包含栅格几何对象的输入要素,并在对所有波段应用卷积滤波 器后输出要素。 本人对栅格数据处理的较…

【2023】kafka在linux和docker安装(kafka-1)

目录💻 一、linux安装kafka1. 安装jdk2. 上传解压到/usr/local目录下3、使用kafka 二、docker安装kafka1. 下载2. 安装zookeeper3. 安装kafka 一、linux安装kafka 环境主机 mac m2、虚拟机Ubuntu22.04.4 1. 安装jdk yum install -y java-1.8.0-openjdk.x86_64下载k…

11-设计模式:Go常用设计模式概述

设计模式是啥呢?简单来说,就是将软件开发中需要重复性解决的编码场景,按最佳实践的方式抽象成一个模型,模型描述的解决方法就是设计模式。使用设计模式,可以使代码更易于理解,保证代码的重用性和可靠性。 …

【Entity Framework】EF中DbSet类详解

【Entity Framework】EF中DbSet类详解 文章目录 【Entity Framework】EF中DbSet类详解一、概述二、定义DbSet2.1 具有DbSet属性的DbContext2.2 具有 IDbSet 属性的 DbContext 2.3 具有 IDbSet 属性的 DbContext三、DbSet属性四、DbSet方法五、DbContext动态生成DbSet 一、概述 …

打工人神器! Raccoon 代码小浣熊

继这三个之后,今天又来了一个 [ Raccoon代码小浣熊 ] 核心精要与产品特点 全面支持多种编程语言和IDE:「代码小浣熊」支持超过90种主流编程语言,包括但不限于Python、Java、JavaScript、C、Go和SQL等。同时,它集成了市面上主流的…

Quiet-STaR:让语言模型在“说话”前思考

大型语言模型(llm)已经变得越来越复杂,能够根据各种提示和问题生成人类质量的文本。但是他们的推理能力让仍然是个问题,与人类不同LLM经常在推理中涉及的隐含步骤中挣扎,这回导致输出可能在事实上不正确或缺乏逻辑。 考虑以下场景:正在阅读一…