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.mfbz.cn/a/502451.html

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

相关文章

mysql进阶知识总结

1.存储引擎 1.1MySQL体系结构 1).连接层 最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证…

关于v114之后的chromedriver及存放路径

使用selenium调用浏览器时,我一直调用谷歌浏览器,可浏览器升级后,就会再次遇到以前遇到过的各种问题,诸如:1、怎么关闭浏览器更新;2、去哪儿下载chromedriver;3、114版本之后的驱动去哪儿下载&a…

面试题:JVM的垃圾回收

一、GC概念 为了让程序员更专注于代码的实现,而不用过多的考虑内存释放的问题,所以,在Java语言中,有了自动的垃圾回收机制,也就是我们熟悉的GC(Garbage Collection)。 有了垃圾回收机制后,程序员只需要关…

力扣2. 两数相加

Problem: 2. 两数相加 文章目录 题目描述思路复杂度Code 题目描述 思路 1.创建虚拟头节点dummy,用于存储相加的结果数字; 2.让指针p1、p2、tail分别指向l1、l2、dummy,定义int变量carry记录每次相加的进位值; 3.当p1不为空或者p2不…

双非计算机考研目标211,选11408还是22408更稳?

求稳得话,11408比22408要稳! 很多同学只知道,11408和22408在考察的科目上有区别,比如: 11408考的是考研数学一和英语一,22408考察的是考研数学二和英语二: 考研数学一和考研数学二的区别大吗…

会话跟踪技术(Session 以及Cookie)

一: 前提概要 1>会话: 会话指的是用户打开浏览器, 访问某些web服务器资源的时候, 会话就会进行建立, 直到有一方断开, 那么会话才会结束, 需要注意的一点是, 一次的会话可以有多次的请求以及响应 2>会话跟踪: 是一种用于维护浏览器状态的方法, 服务器需要识别多次的请求,…

与鲸同行,智领未来!和鲸科技“人工智能+X”学科建设合作交流会(北京站)圆满结束!

在国家加快发展新质生产力的大背景下,3月25日下午,和鲸科技 2024 年“人工智能X”学科建设合作交流会(北京站)暨“AIX”实验室建设与供应商选型座谈会顺利召开。为提供更为集中和专业的讨论环境,本次会议特别采取闭门审…

Flink on Kubernetes (flink-operator) 部署Flink

flink on k8s 官网 https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.1/docs/try-flink-kubernetes-operator/quick-start/ 我的部署脚本和官网不一样,有些地方官网不够详细 部署k8s集群 注意,按照默认配置至少有两台wo…

概率论经典题目-二维随机变量及分布--求离散型的联合分布律和边缘分布律问题

题目:一整数N等可能地在1,2,3,…,10十个值中取一个值设DD(N)是能整除N的正整数的个数,FF(N)是能整除N的素数的个数(注意1不是素数).试写出D和F的联合分布律,并求边缘分布律? 解答: 1)要确定整数 N 能够被整除的正整数个数 D 和素…

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

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

可重复不限数量结构数列的演化

有一个6*6的平面,这个平面的行和列可以自由的变换,在这个平面上有一个4点结构数列 按照8,13,5,8的顺序排列。让这个数列按照4-5-4的方式演化 这个数列很快收敛,收敛顺序为13,8,8,5 8…

Revit文件版本查看小工具

最近群里和私信的时候,经常有小伙伴询问如何不打开Revit查看Revit文件的版本。 习惯性的,第一思路是打开Dynamo,但是第一反应还需要先开Revit。 另外呢,群里小伙伴说优比的插件也可以。 总之呢,都需要一些工具&#xf…

对接中泰极速行情 | DolphinDB XTP 插件使用教程

XTP 是中泰证券推出的高性能交易平台,专为专业投资者提供高速行情及交易系统,旨在提供优质便捷的市场接入通道。目前支持股票、基金、ETF、债券、期权等多个市场,可满足不同投资者需求。 基于 XTP 官方 C SDK,DolphinDB 开发了 X…

【IDEA】使用debug方式去运行java程序

什么是debug工具? 调试工具(debug工具)是一种用于帮助程序员识别和修复程序中的错误的工具。它们提供了一系列的功能,帮助程序员在代码执行的过程中跟踪和检测问题,例如查看变量的值、检查函数的调用栈、设置断点来停…

算法学习——LeetCode力扣动态规划篇2

算法学习——LeetCode力扣动态规划篇2 343. 整数拆分 343. 整数拆分 - 力扣(LeetCode) 描述 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得…

java: 找不到符号 符号: 变量 log

在以下位置加上该配置"-Djps.track.ap.dependenciesfalse"

文件操作(随机读写篇)

1. 铺垫 建议先看: 文件操作(基础知识篇)-CSDN博客 文件操作(顺序读写篇)-CSDN博客 首先要指出的是,本篇文章中的“文件指针”并不是指FILE*类型的指针,而是类似于打字时的光标的东西。 打…

C++:类的6大默认成员函数:赋值运算符重载

文章目录 赋值运算符重载1.1 运算符重载的引用1.2 运算符重载的概念1.3 赋值运算符重载总结一下(赋值运算符) 赋值运算符重载 1.1 运算符重载的引用 有一个日期类Date: class Date { public:Date(int year 1900, int month 1, int day 1){_year year;_month month;_da…

Rust使用feature特性和条件编译,以及常用feature使用说明

Cargo Feature 是非常强大的机制,可以为大家提供条件编译和可选依赖的高级特性,可以为你省下不少的代码量来判断操作系统和条件编译等功能。rust官方条件编译文档:Conditional compilation - The Rust Reference features特性 Featuure 可以…

GeometryInstance点击改变颜色

目录 项目地址实现效果核心代码 项目地址 https://github.com/zhengjie9510/webgis-demo 实现效果 核心代码 // Draw different instances each with a unique color const rectangleInstance new Cesium.GeometryInstance({geometry: new Cesium.RectangleGeometry({recta…