Python Pillow图像编辑

Pillow简介

Pillow 不仅是 PIL 库的“复制版”,而且它又在 PIL 库的基础上增加了许多新的特性。Pillow 发展至今,已经成为了比 PIL 更具活力的图像处理库。

Pillow 的初衷只是想作为 PIL 库的分支和补充,如今它已是“青出于蓝而胜于蓝”。

Pillow 是 Python 中较为基础的图像处理库,主要用于图像的基本处理,比如裁剪图像、调整图像大小和图像颜色处理等。与 Pillow 相比,OpenCV 和 Scikit-image 的功能更为丰富,所以使用起来也更为复杂,主要应用于机器视觉、图像分析等领域,比如众所周知的“人脸识别”应用。

Pillow 库(有时也称 PIL 库) 是 Python 图像处理的基础库,它是一个免费开源的第三方库,Pillow 提供了非常强大的图像处理功能,它能够很轻松地完成一些图像处理任务。与 Python 的其他图像处理库相比(OpenCV、Scikit-image 等),Pillow 库简单易用,非常适合初学者学习。

Pillow 库提供了非常丰富的功能,主要有以下几点:

  • Pillow 库能够很轻松的读取和保存各种格式的图片;
  • Pillow 库提供了简洁易用的 API 接口,可以让您轻松地完成许多图像处理任务;
  • Pillow 库能够配合 GUI(图形用户界面) 软件包 Tkinter 一起使用;
  • Pillow 库中的 Image 对象能够与 NumPy ndarray 数组实现相互转换。

图像加载与显示

from PIL import Image
#打开一图片文件
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
#要显示图像需要调用 show()方法
im.show()
#使用颜色的十六进制格式
im_1=Image.new(mode='RGB',(260,100),color="#ff0000")
im_1.show()

new() 方法可以创建一个新的 Image 对象

查看图像的尺寸

from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
#打印image对象
print(im)
#查看尺寸
print("宽是%s高是%s"%(im.width,im.height))
#或者通过size查看
print("图像的大小size:",im.size)

查看图片的格式

from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
print("图像的格式:",im.format)

查看图片相关信息

from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
# 包括了每英寸像素点大小和截图软件信息
print("图像信息:",im.info)

图像模式

from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
print("图像模式信息:",im.mode)

在这里插入图片描述

图像转换

Pillow 支持将图像从一种模式转换为另一种模式。常见的模式包括:

  • ‘L’:灰度模式
  • ‘RGB’:彩色模式
  • ‘CMYK’:印刷用的四分色模式
# 将RGB图像转换为灰度图像
gray_image = image.convert('L')
gray_image.show()

保存图片

from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
im.save('C:/Users/Administrator/Desktop/c.biancheng.net.bmp')
from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
#此时返回一个新的image对象,转换图片模式
image=im.convert('RGB')
#调用save()保存
image.save('C:/Users/Administrator/Desktop/c.biancheng.net.jpg')

图片缩放

from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
try:#放大图片image=im.resize((550,260))#将新图像保存至桌面image.save("C:/Users/Administrator/Desktop/放大图像.png")print("查看新图像的尺寸",image.size)
except IOError:print("放大图像失败")
resize(size, resample=image.BICUBIC, box=None, reducing_gap=None)

参数说明:

  • size:元组参数 (width,height),图片缩放后的尺寸;
  • resample:可选参数,指图像重采样滤波器,与 thumbnail() 的 resample 参数类似,默认为 Image.BICUBIC;
  • box:对指定图片区域进行缩放,box 的参数值是长度为 4 的像素坐标元组,即 (左,上,右,下)。注意,被指定的区域必须在原图的范围内,如果超出范围就会报错。当不传该参数时,默认对整个原图进行缩放;
  • reducing_gap:可选参数,浮点参数值,用于优化图片的缩放效果,常用参数值有 3.0 和 5.0。

图片裁剪

# 裁剪图像
cropped_image = image.crop((50, 50, 150, 150))
cropped_image.show()
crop(box=None)

box:表示裁剪区域,默认为 None,表示拷贝原图像。

注意:box 是一个有四个数字的元组参数 (x_左上,y_左下,x1_右上,y1_右下),分别表示被裁剪矩形区域的左上角 x、y 坐标和右下角 x,y 坐标。默认 (0,0) 表示坐标原点,宽度的方向为 x 轴,高度的方向为 y 轴,每个像素点代表一个单位。

图像旋转与翻转

# 旋转图像
rotated_image = image.rotate(45)
rotated_image.show()# 水平翻转图像
flipped_image = image.transpose(Image.FLIP_LEFT_RIGHT)
flipped_image.show()

图像滤镜

from PIL import ImageFilter# 应用模糊滤镜
blurred_image = image.filter(ImageFilter.BLUR)
blurred_image.show()# 应用轮廓滤镜
contour_image = image.filter(ImageFilter.CONTOUR)
contour_image.show()

Pillow 内置了多种滤镜,常见的有模糊滤镜、轮廓滤镜、锐化滤镜等

通道操作

# 拆分通道
r, g, b = image.split()# 操作通道,如增强红色通道
enhanced_r = r.point(lambda i: i * 1.5)
# 合并通道
merged_image = Image.merge('RGB', (enhanced_r, g, b))
merged_image.show()

Pillow 允许我们对图像的各个颜色通道进行独立操作。比如,我们可以拆分图像的 RGB 通道,并单独处理某一通道

文字与图像的结合

from PIL import ImageDraw, ImageFont# 创建一个新的白色图像
image = Image.new('RGB', (300, 100), color = 'white')# 初始化绘图对象
draw = ImageDraw.Draw(image)# 定义字体和大小
font = ImageFont.truetype("arial.ttf", 40)# 在图像上绘制文字
draw.text((50, 25), "Hello, Pillow!", font=font, fill=(0, 0, 0))# 显示图像
image.show()

Pillow 支持在图像上绘制文字或图形,这一功能对于创建水印、生成动态图片等非常有用。ImageDraw 模块允许你在图像上进行绘制操作

图像合并

Image.merge(mode, bands)

参数说明如下:

  • mode:指定输出图片的模式
  • bands:参数类型为元组或者列表序列,其元素值是组成图像的颜色通道,比如 RGB 分别代表三种颜色通道,可以表示为 (r,g,b)。
from PIL import Image
#打开图2.jpg
im_1 = Image.open("C:/Users/Administrator/Desktop/2.jpg")
im_2= Image.open("C:/Users/Administrator/Desktop/向日葵.jpg")
#因为两种图片的图片格式一致,所以仅需要处理图片的大小,让它们保持一致
#让 im_2 的图像尺寸与 im_1 一致,注意此处新生成了 Image 对象
image = im_2.resize(im_1.size)
#接下来,对图像进行颜色分离操作
r1, g1 ,b1 = im_1.split()
r2, g2 , b2 = image.split()
# 合并图像
im_3 = Image.merge('RGB',[r2,g1,b2])
im_3.show()
im_3.save("C:/Users/Administrator/Desktop/合成.jpg")
""""
混合 rgba模式的图像
"""
im1 = Image.open("C:/Users/Administrator/Desktop/c-net.png")
image = Image.open("C:/Users/Administrator/Desktop/心形函数图像.png")
im2=image.resize(im1.size)
def blend_im(im1,im2):#设置 alpha 为 0.5Image.blend(im1,im2,0.5).save("C:/Users/Administrator/Desktop/C语言中文网.png")
#调用函数
blend_im(im1,im2)  

在这里插入图片描述

模糊处理

# 导入Image类和ImageFilter类
from PIL import Image,ImageFilter
im = Image.open("C:/Users/Administrator/Desktop/国宝.jpg")
#图像模糊处理
im_blur=im.filter(ImageFilter.BLUR)
im_blur.show()
im_blur.save("C:/Users/Administrator/Desktop/模糊.png")

轮廓图

from PIL import Image,ImageFilter
im = Image.open("C:/Users/Administrator/Desktop/国宝.jpg")
#生成轮廓图
im2=im.filter(ImageFilter.CONTOUR)
im2.show()
im2.save("C:/Users/Administrator/Desktop/轮廓图.png")

边缘检测

from PIL import Image,ImageFilter
im = Image.open("C:/Users/Administrator/Desktop/国宝.jpg")
#边缘检测
im3=im.filter(ImageFilter.FIND_EDGES)
im3.show()
im3.save("C:/Users/Administrator/Desktop/边缘检测.png")

浮雕图

from PIL import Image,ImageFilter
im = Image.open("C:/Users/Administrator/Desktop/国宝.jpg")
#浮雕图
im4=im.filter(ImageFilter.EMBOSS)
im4.show()
im4.save("C:/Users/Administrator/Desktop/浮雕图.png")

平滑图像

#生成平滑图像
from PIL import Image,ImageFilter
im = Image.open("C:/Users/Administrator/Desktop/国宝.jpg")
#平滑图smooth
im5=im.filter(ImageFilter.SMOOTH)
im5.show()
im5.save("C:/Users/Administrator/Desktop/平滑图.png")

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

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

相关文章

爬虫开发(1)爬虫开发工具介绍与环境搭建

在数据驱动的时代,网络爬虫成为了获取大量数据的重要手段。无论是市场调研、竞争对手分析还是学术研究,爬虫都能帮助我们高效地收集和处理信息,所以你还不抓紧学习爬虫嘛? 在本文中,博主将详细介绍如何搭建爬虫开发环境…

1+X应急响应(网络)系统信息收集分析:

系统信息收集分析: 系统启动项和计划任务分析: 系统进程,服务分析: 内存取证: 系统崩溃转储:

Python基础学习-09文件操作

目录 1、常见文件操作 2、常见文件函数 3、文件中存储并解析Python对象 4、本节总结 1、常见文件操作 • 常见文件操作 1) fileopen(file_path) #默认modert 2) fileopen(file_path, “r”) 3) fileopen(file_path, encodin…

《人工智能深度学习的基本路线图》

《人工智能深度学习的基本路线图》 基础准备阶段 数学基础: 线性代数:深度学习中大量涉及矩阵运算、向量空间等概念,线性代数是理解和处理这些的基础。例如,神经网络中的权重矩阵、输入向量的运算等都依赖于线性代数知识。学习内容…

找不到vcruntime140.dll怎么办,彻底解决vcruntime140.dll丢失的5种方法

当计算机系统中无法找到vcruntime140.dll这个特定的动态链接库文件时,可能会引发一系列运行问题,具体表现形式多样且影响范围较广。对于依赖于该文件运行的各类软件应用来说,缺失vcruntime140.dll将直接导致程序无法正常启动或执行&#xff0…

Redis学习 ——缓存

文章目录 一、Redis缓存的介绍二、Redis缓存问题2.1 缓存穿透2.2 缓存击穿2.3 缓存雪崩2.4 双写一致性2.5 缓存持久化RDBAOF 三、缓存数据管理3.1 数据过期策略3.2 数据淘汰策略 一、Redis缓存的介绍 我们在日常的代码编写中比较少使用到Redis,但是如果涉及到了比较…

“乐鑫组件注册表”简介

当启动一个新的开发项目时,开发者们通常会利用库和驱动程序等现有的代码资源。这种做法不仅节省时间,还简化了项目的维护工作。本文将深入探讨乐鑫组件注册表的概念及其核心理念,旨在指导您高效地使用和贡献组件。 概念解析 ESP-IDF 的架构…

视觉SLAM--经典视觉SLAM框架

整个视觉SLAM流程主要包括以下步骤: 1、传感器信息读取:在视觉SLAM中主要为相机图像信息的读取和预处理。 2、前端视觉里程计:估算相邻图像间相机的运动,以及局部地图的样子。 3、后端(非线性)优化&#…

Spring IOC注入方式、Bean作用域

Spring IOC注入 手动注入 set方法注入 需要提供set方法 public class UserService {private UserDao userDao; ​public void setUserDao(UserDao userDao) {this.userDao userDao;} } 设置属性字段的值 <bean id"userService" class"com.shsxt.servi…

Ajax的相关内容

一、Ajax的使用步骤 1.创建XML对象 const xhrnew XMLHttpRequest(); 2.监听事件&#xff0c;处理响应 3.准备发送请求 true表示异步 ajax中永远是异步&#xff0c;永远是true 4.发送请求 二、GET和POST请求 三、JSON的三种形式 四、JSON的方法 五、跨域 六、XHR的属性和方法…

有限状态机(续)

一、添加刀光和场景 1、资源链接&#xff1a; 武器刀光&#xff1a;https://assetstore.unity.com/packages/tools/particles-effects/melee-weapon-trail-1728 场景&#xff1a;https://assetstore.unity.com/packages/3d/environments/fantasy/casual-tiny-environment-ju…

【日常记录-Git】撤销工作区中所有已跟踪文件的修改

1. 简介 在Git中&#xff0c;若想恢复工作区中的所有文件到它们最后一次提交时的状态&#xff0c;可以使用 git restore 命令结合适当的选项来实现。不过&#xff0c;需要注意的是&#xff0c;git restore 默认不会递归地恢复目录&#xff0c;但你可以通过指定 . (代表当前目…

2024年11月16日 星期六 重新整理Go技术

今日格言 坚持每天进步一点点~ 一个人也可以是一个团队~ 学习全栈开发, 做自己喜欢的产品~~ 简介 大家好, 我是张大鹏, 今天是2024年11月16日星期六, 很高兴在这里给大家分享技术. 今天又是休息的一天, 做了很多的思考, 整理了自己掌握的技术, 比如Java, Python, Golang,…

微信小程序02-页面制作

微信小程序页面制作指南 目录 微信小程序页面制作 1. 个人信息展示小程序 案例分析 需求背景&#xff1a;许多大学生毕业后需要求职&#xff0c;因此制作一个展示个人信息的微信小程序对招聘人员快速了解求职者非常有帮助。页面布局&#xff1a;页面分为头像区域和详细信息…

【Linux】软件包管理器yum、编辑器vim

Linux 1.源码安装 和 软件包安装2.软件包管理器yum1.什么是包管理器 3.vim编辑器1.vim常见的三种模式2.vim命令模式&#xff1a;命令集3.vim底行模式&#xff1a;命令集4.使用vim的小技巧5.vim配置 1.源码安装 和 软件包安装 在Linux下安装软件&#xff0c;一个通常的办法是下…

高项 - 项目进度管理

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 博文更新参考时间点&#xff1a;2024-12 高项 - 章节与知识点汇总&#xff1a;点击跳转 文章目录 高项 - 项目进度管理进度管理ITO规划监控 管理基础项目进度计划的定义和总要求管理新实践用户故事&#xff08;补…

【CSS】opacity 影响 z-index 不生效

准备知识 一般来说&#xff0c;z-index 不生效的原因有&#xff1a; 父元素的 position 属性&#xff1a; z-index 只对 position 属性为 relative、absolute 或 fixed 的元素有效。 其他元素的 z-index&#xff1a; 如果页面中有其他元素也设置了较高的 z-index&#xff0c;…

11.15 ~ 18日志

1.Problem - A - Codeforces 这道题感觉网上的题解都讲得非常复杂,但是也给了我一些启发,最后a出来后发现并没有那么困难,首先这题假设我们的答案是x,那么就代表有(sum k) / x个牌堆,想要让x合法需要满足两个条件 1.(sum k) / x > maxn,因为每副牌堆不能有重复的牌,那么…

django安装与项目创建

一、安装 在终端输入 pip install django //或者(&#xff09;指定安装版本 pip install django2.2 二、创建项目 2.1创建项目 django-admin startproject 项目名 2.2Django 项目中的关键文件 _init_.py:将目录标识为python包setting.py:核心配置文件&#xff0c;定义项目…

《高压物理学报》

刊载内容主要包括&#xff1a; 高温高压下材料的力、热、光、电、磁等特性 高温高压下材料的微观结构和相变 高温高压物态方程 动态及静态高压加载和测试技术 高压合成新材料 高压地球和行星科学 高压下物质的动态响应 冲击和爆轰现象 高压与化学、生物等交叉科学及技…