Python 图像处理之PIL库详解用法
作者:Paranoid☆ 发布时间:2023-05-02 18:06:50
前言
提示:以下是本篇文章正文内容
🍒PIL库概述
PIL库支持图像存储、 显示和处理, 它能够处理几乎所有图片格式, 可以完成
对图像的缩放、 剪裁、 叠加以及向图像添加线条、 图像和文字等操作
PIL库可以完成图像归档和图像处理两方面功能需求:
(1)图像归档:对图像进行批处理、 生成图像预览、 图像格式转换等
(2)图像处理:图像基本处理、 像素处理、 颜色处理等
🍓Image类解析
💚图像的创建
在PIL中, 任何一个图像文件都可以用Image对象表示Image类的图像读取和创建方法
方法 | 描述 |
---|---|
Image.open(filename) | 根据参数加载图像文件 |
Image.new(mode, size, color) | 根据给定参数创建一个新的图像 |
Image.open(StringIO.StringIO(buffer)) | 从字符串中获取图像 |
Image.frombytes(mode, size, data) | 根据像素点data创建图像 |
Image.verify() | 对图像文件完整性进行检查, 返回异常 |
from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\2049675.jpg")
im.show() // 显示
基本上如下图
💙图像的属性
属性 | 描述 |
---|---|
Image.format | 标识图像格式或来源, 如果图像不是从文件读取, 值是None |
Image.mode | 图像的色彩模式, "L"灰度图像、 "RGB"真彩色图像、 "CMYK"出版图像 |
Image.format | 标识图像格式或来源, 如果图像不是从文件读取, 值是None |
Image.size | 图像宽度和高度, 单位是像素(px) , 返回值是二元元组(tuple) |
Image.palette | 调色板属性, 返回一个ImagePalette类型 |
from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\2049675.jpg")
im.show()
print(im.format,im.size)
# 结果
# JPEG (1920, 1080)
💜图像的转换
方法 | 描述 |
---|---|
Image.save(filename, format) | 将图像保存为filename文件名, format是图片格式 |
Image.convert(mode) | 使用不同的参数, 转换图像为新的模式 |
Image.thumbnail(size) | 创建图像的缩略图, size是缩略图尺寸的二元元组 |
jpg 转换成png
from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\2049675.jpg")
print(im)
im.save(r"E:\Pycharm\Project\pictures\2049675changed.png")
im = Image.open(r"E:\Pycharm\Project\pictures\2049675changed.png")
print(im)
im.show()
# 结果
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1920x1080 at 0x1A8DE865F40>
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=1920x1080 at 0x1A8DE8D2E80>
GIF文件图像提取。
对一个GIF格式动态文件, 提取其中各帧图像, 并保存为文件
from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\21.gif") # 读入一个GIF文件
try:
im.save('picframe{:02d}.png'.format(im.tell()))
while True:
im.seek(im.tell()+1) # 帧的位置
im.save('picframe{:02d}.png'.format(im.tell()))
except:
print("处理结束")
结果
tell()方法:返回当前帧所处位置,从0开始计算
缩略图
from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\2050074.jpg")
print(im)
im.thumbnail((128, 99))
im.save("mm","JPEG")
print(im)
im.show()
# 结果
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=2757x2135 at 0x238DFCD5DC0>
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=128x99 at 0x238DFCD5DC0>
💗图像处理
1.Image类可以缩放和旋转图像, 其中, rotate()方法以逆时针旋转的角度值作
为参数来旋转图像。
方法 | 描述 |
---|---|
Image.resize(size) | 按size大小调整图像, 生成副本 |
Image.rotate(angle) | 按angle角度旋转图像, 生成副本 |
2.Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作,split()
方法能够将RGB图像各颜色通道提取出来, merge()方法能够将各独立通道再合成一幅新的图像。
方法 | 描述 |
---|---|
Image.point(func) | 根据函数func功能对每个元素进行运算, 返回图像副本 |
Image.split() | 提取RGB图像的每个颜色通道, 返回图像副本 |
Image.merge(mode, bands) | 合并通道 , 采用mode色彩, bands是新色的色彩通道 |
Image.blend(im1,im2,alpha) | 将两幅图片im1和im2按照如下公式插值后生成新的图像:im1 * (1.0-alpha) + im2 * alpha |
图像的颜色交换
交换图像中的颜色, 可以通过分离RGB图片的三个颜色通道实现颜色交换
from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\2050536.jpg") #打开文件
r, g, b = im.split() #获得RGB通道数据
newg = g.point(lambda i: i * 0.9) # 将G通道颜色值变为原来的0.9倍
newb = b.point(lambda i: i < 100) # 选择B通道值低于100的像素点
om = Image.merge(im.mode, (r, newg, newb)) # 将3个通道合形成新图像
om.save(r"E:\Pycharm\Project\pictures\aa.jpg") #输出图片
om.show()
原图:
交换后
3.图像的过滤和增强
PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法, 共10种
方法表示 | 描述 |
---|---|
ImageFilter.BLUR | 图像的模糊效果 |
ImageFilter.CONTOUR | 图像的轮廓效果 |
ImageFilter.DETAIL | 图像的细节效果 |
ImageFilter.EDGE_ENHANCE | 图像的边界加强效果 |
ImageFilter.EDGE_ENHANCE_MORE | 图像的阈值边界加强效果 |
ImageFilter.EMBOSS | 图像的浮雕效果 |
ImageFilter.FIND_EDGES | 图像的边界效果 |
ImageFilter.SMOOTH | 图像的平滑效果 |
ImageFilter.SMOOTH_MORE | 图像的阈值平滑效果 |
ImageFilter.SHARPEN | 图像的锐化效果 |
轮廓效果
from PIL import Image
from PIL import ImageFilter
im = Image.open(r"E:\Pycharm\Project\pictures\2050558.jpg")
om = im.filter(ImageFilter.CONTOUR)
om.save('abc.jpg')
om.show()
原图:
修改后:
4.ImageEnhance类提供了更高级的图像增强需求,它提供调整色彩度、 亮度、 对比度、 锐化等功能
方法 | 描述 |
---|---|
ImageEnhance.enhance(factor) | 对选择属性的数值增强factor倍 |
ImageEnhance.Color(im) | 调整图像的颜色平衡 |
ImageEnhance.Contrast(im) | 调整图像的对比度 |
ImageEnhance.Brightness(im) | 调整图像的亮度 |
ImageEnhance.Sharpness(im) | 调整图像的锐度 |
来源:https://blog.csdn.net/qq_53144843/article/details/121058504


猜你喜欢
- 按照惯例,年底的淘宝的确是到了“需要改版的时候”。这次新版的淘宝首页上线,乍看并没有多少夺人眼球的地方,但仔细揣摩其中的细节,还是发现了不少
- 最近经常遇到xmlHttp组件的问题, 今天终于有空将解决过程中的经验整理下来了! ^o^一、在运用xmlhttp组件编
- 一.问题描述当我们在做项目的时候,创建一张用户表,如何让该表的主键id从0开始自增?网上搜索了很多解决方案,最后发现了一种方法必实现且有效的
- 在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合
- 在windows中罗技K380可以安装Logitech Options来实现这个Fn锁定功能。在linux中如何实现Logitech Opt
- 本文实例讲述了Python pandas RFM模型应用。分享给大家供大家参考,具体如下:什么是RFM模型根据美国数据库营销研究所Arthu
- 1、PRIMARY KEY上期我们讲述了 not null 和 unique 约束,而本期的第一个约束就是这俩的结合体,也成为主键约束。主键
- 注意: 在搭建网络的时候用carpool2D的时候,让高度和宽度方向不同池化时,用如下:nn.MaxPool2d(kernel_size=2
- 本文实例讲解了Python中除法使用的注意事项,是非常重要的技巧,对于Python程序设计来说有很好的借鉴价值。具体分析如下:现来看如下示例
- 此程序主要是针对某个目录下的全部文件进行筛选,会删除重复的文件。原理很简单,会计算每个文件的哈希,将哈希存入一个字典,文件名对应哈希。imp
- cooper谈到用户的视觉路径一般是:从上到下,从左到右。好的视觉设计路径应该是顺应这样的用户习惯,糟糕的设计会让用户无所适从,焦点到处都是
- 一、概述OLAP的系统(即Online Aanalyse Process)一般用于系统决策使用。通常和数据仓库、数据分析、数据挖掘等概念联系
- 本文实例讲述了python通过ssh-powershell监控windows的方法。分享给大家供大家参考。具体分析如下:对于服务器的监控来说
- 这篇文章主要介绍了python paramiko远程服务器终端操作过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 本文实例主要实现给出任意字符串,获取字符串中某字符的位置以及出现的总次数。实现该功能代码的时候可以使用函数enumerate来将字符串分离成
- 简介在之前的编程中,我们的信息打印,数据的展示都是在控制台(命令行)直接输出的,信息都是一次性的没有办法复用和保存以便下次查看,今天我们将学
- 代码如下:CREATE PROCEDURE page @tblName varchar(255), -- 表名 @strGetF
- MySQL报错:错误代码: 1293 Incorrect table definition; there can be only one T
- 前言开始几天,我是使用很原始的方法,自己去获取天气预报截图,再手动发送给小姐姐。连续几天之后我一想:不对呀,我怎么说也是一个程序猿,怎么能用
- jsp登陆验证,网页登陆验证带验证码校验,登录功能之添加验证码part_1:专门用于生成一个验证码图片的类:VerificationCode