Pillow库进行图像文件处理(二)(配图详解)

简介: Pillow库进行图像文件处理(二)(配图详解)

       大家好,今天我们来继续学习Pillow的相关知识,本文详解的讲解了使用Pillow库进行图片的简单处理,使用PyCharm开发Python的详细过程和各种第三方库的安装与使用。运用pillow来对图片进行处理,我们先介绍如何安装Pillow库和图象处理基本知识的介绍。上一篇我们介绍了如何透明度混合以及遮盖混合。今天我们说说关于图片的复制和缩放,粘贴和裁剪,分离和合并。


       Pillow 是 Python Imaging Library的简称,是 Python 语言中最为常用的图像处理库。Pillow 库提供了对 Python3 的支持,为Python3 解释器提供了图像处理的功能。通过使用 Pillow 库, 可以方便地使用 Python 程序对图片进行处理,例如常见的尺寸、格式、色彩、旋转等处理。


       我们继续介绍Image 模块的其他功能。


复制和缩放

       我们可以利用pillow功能,实现复制和缩放,在我们传统的观念里,我们只能放大图片尺寸,其实,我们还可以放大像素,有点人可能就好奇了,像素怎么放大,这里就要使用函数 eval()实现像素缩放处理。


(1) 复制图像

在 Pillow 库的 Image 模块中,可以使用函数 Image.copy()复制指定的图片,这可以 用于在处理或粘贴时需要持有源图片。


(2) 缩放像素

在 Pillow 库的 Image 模块中,可以使用函数 eval()实现像素缩放处理,能够使用函 数 fun()计算输入图片的每个像素并返回。使用函数 eval()语法格式如下

eval(image,fun)


其中 image 表示输入的图片,fun 表示给输入图片的每个像素应用此函数,fun()函数 只允许接收一个整型参数。如果一个图片含有多个通道,则每个通道都会应用这个函数。

【示例】缩放指定的图片,实现图像每个像素值×2

from PIL import Image
img=Image.open('img.jpg')
Image.eval(img,lambda i:i*2).show()


(3) 缩放图像

在 Pillow 库的 Image 模块中,可以使用函数 thumbnail()原生地缩放指定的图像 。具 体语法格式如下:

Image.thmbnail(size,resample=3)


【示例】缩放成指定的大小

from PIL import Image
img=Image.open('img.jpg')
imgb=img.copy()
#缩放为指定大小(220,268)
imgb.thumbnail((220,268))
imgb.show()

60.jpeg


粘贴和裁剪

前面,我们介绍了复制和缩放,同理,我们还可以进行图片的粘贴和剪裁。

(1) 粘贴

在 Pillow 库的 Image 模块中,函数 paste()的功能是粘贴源图像或像素至该图像中。 具体语法格式如下:

Image.paste(im,box=None,mask=None)

1.其中 im 是源图或像素值;box 是粘贴的区域;mask 是遮罩。参数 box 可以分为以 下 3 中情况。 (x1,y1):将源图像左上角对齐(x1,y1)点,其余超出被粘贴图像的区域被抛弃。

2.(x1,y1,x2,y2):源图像与此区域必须一致。

3.None:源图像与被粘贴的图像大小必须一致。


(2) 裁剪图像

在 Pillow 库的 Image 模块中,函数 crop()的功能是剪切图片中 box 所指定的区域, 具体语法如下:

Image.crop(box=None)


参数 box 是一个四元组,分别定义了剪切区域的左、上、右、下 4 个坐标.


【示例】对指定图片剪切和粘贴操作


from PIL import Image
img=Image.open('img.png')
#复制图片
imgb=img.copy()
imgc=img.copy()
#剪切图片
region=imgb.crop((5,5,120,120))
#粘贴图片
imgc.paste(region,(30,30))
imgc.show()

分离和合并

(1) 分离

在 Pillow 库的 Image 模块中,使用函数 split()可以将图片分割为多个通道列表。使 用函数 split()的语法格式如下所示:

Image.split()


(2) 合并

在 Pillow 库的 Image 模块中,使用函数 merge()可以将一个通道的图像合并到更多通道图像中。使用函数 merge()的语法格式如下所示:

Image.merge(mode,bands)


其中 mode 指输出图像的模式,bands 波段通道,一个序列包含单个带图通道。

【示例】对指定图片进行合并和分离操作

from PIL import Image
img1=Image.open('1.jpg')
img2=Image.open('2.jpg')
img2=img2.resize(img1.size)
#分隔
r1,g1,b1=img1.split()
r2,g2,b2=img2.split()
temp=[r1,g2,b1]
img=Image.merge('RGB',temp)
img.show()

其他内置函数

在 Pillow 库的 Image 模块中,还有很多其他重要的内置函数和属性。


常用的属性:

  1. Image.format:源图像格式
  2. Image.mode:图像模式字符串
  3. Image.size:图像尺寸

内置函数

在 Pillow 库的 Image 模块中,其他常用的内置函数如下所示:


1.Image.getbands():获取图像每个通道的名称列表,例如 RGB 图像返回[‘R’,’G’,’B’]。

2.Image.getextrema():获取图像最大、最小像素的值。

3.Image.getpixel(xy):获取像素点值。

4.Image.histogram(mask=None,extrema=None):获取图像直方图,返回像素计数的列表。

5.Image.point(function):使用函数修改图像的每个像素。

6.Image.putalpha(alpha):添加或替换图像的 alpha 层。

7.Image.save(fp,format=None,**params):保存图片。

8.Image.show(title=None,command=None):显示图片。

9.Image.transform(size,method,data=None,resample=0,fill=1):变换图像。

10.Image.verify():校验文件是否损坏。

11.Image.close():关闭文件。


相关文章
|
5月前
|
传感器 人工智能 自然语言处理
比亚迪座舱接入通义大模型,未来将联合打造更多AI智能座舱场景
比亚迪与阿里云深度合作,将通义大模型应用于智能座舱和营销服务。通过通义万相,腾势推出“AI壁纸”功能;借助通义星尘,实现“心理伴聊”等情感陪伴场景。阿里云Mobile-Agent智能体落地比亚迪座舱,支持复杂语音操作,如查询淘宝物流、订火车票等。该方案基于全视觉解决技术,具有强泛化能力,未来双方将持续拓展更多AI应用。
737 9
|
5月前
|
机器学习/深度学习 运维 监控
实时异常检测实战:Flink+PAI 算法模型服务化架构设计
本文深入探讨了基于 Apache Flink 与阿里云 PAI 构建的实时异常检测系统。内容涵盖技术演进、架构设计、核心模块实现及金融、工业等多领域实战案例,解析流处理、模型服务化、状态管理等关键技术,并提供性能优化与高可用方案,助力企业打造高效智能的实时异常检测平台。
440 1
|
6月前
|
边缘计算 人工智能 云计算
HIS系统的核心模块:医生工作站
医生工作站是HIS系统的核心模块,围绕诊疗流程一体化、电子病历智能化、医嘱闭环管理、辅助决策支持及移动化操作五大方面优化医疗流程。它整合患者信息,提供结构化病历生成与质控,实现医嘱全流程追踪,结合药品和诊疗知识库辅助决策,并支持多场景便捷操作。通过数据整合与智能工具,提升诊疗效率与质量,助力智慧医疗发展。
292 2
|
11月前
|
存储 安全 芯片
硬盘数据恢复—硬盘电路板损坏的数据恢复方案
硬盘故障: 硬盘电路板损坏。 硬盘电路板损坏的典型表现: 1、硬盘加电无任何反应。 2、硬盘电路芯片等模块损坏或缺失。
282 15
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
2483 3
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
移动开发 程序员 Linux
老程序员分享:linux驱动开发笔记_ioctl函数
老程序员分享:linux驱动开发笔记_ioctl函数
|
Android开发 Swift iOS开发
python 基于电脑蓝牙连接获取手机的实时数据
python 基于电脑蓝牙连接获取手机的实时数据
329 0
|
网络安全 安全 Java
Java一分钟之-SSL/TLS:安全套接字层与传输层安全
【6月更文挑战第2天】本文介绍了SSL/TLS协议在保护数据传输中的作用,以及Java中使用JSSE实现SSL/TLS的基础。内容涵盖SSL/TLS工作流程、版本、常见问题及解决办法。通过`SSLSocket`和`SSLServerSocket`示例展示了服务器和客户端的实现,并强调证书管理、配置检查和依赖更新的最佳实践,以确保安全的通信。
1406 4
|
Java Spring 容器
SpringBoot 使用Quartz执行定时任务对象时无法注入Bean问题
SpringBoot 使用Quartz执行定时任务对象时无法注入Bean问题
705 1
|
Prometheus 监控 Kubernetes
k8s集群监控(4)-部署node-exporter
部署node-export ,监控节点基础监控,比如内存,IO,磁盘,CPU等
k8s集群监控(4)-部署node-exporter