iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中图像处理Pillow库怎么用
  • 513
分享到

Python中图像处理Pillow库怎么用

2023-06-25 16:06:15 513人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍python中图像处理Pillow库怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言:图像处理是常用的技术,Python 拥有丰富的第三方扩展库,Pillow 是 python3 最常用的图像

这篇文章主要介绍python中图像处理Pillow库怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

前言:

图像处理是常用的技术,Python 拥有丰富的第三方扩展库,Pillow 是 python3 最常用的图像处理库,目前最高版本5.2.0。Python2 使用Pil库,两者是使用方法差不多,区别在于类的引用不同。

注意:Pil 库与 Pillow 不能同时存在与一个环境中,如果你已经安装 Pil 库,那么请将他卸载。

使用 pip 安装 Pillow:

> pip install Pillow

一、使用 Image.open() 创建图像实例

Image Pillow 最常用的类,他可以通过多种方式创建图像实例。

“ from PIL import Image ”导入 Image 模块。然后通过 Image 类中的 open 函数即可载入图像文件, open 函数会自动判断图片格式,只需指定文件位置即可。成功,open 函数返回一个 Image 对象;载入文件失败,则会引起 ioError 异常 。

1. 通过文件创建 Image 对象

通过文件创建 Image 图像对象是最常用的方法

示例:通过文件创建 Image 图像对象

from PIL import Imageimage = Image.open('python-loGo.png')  # 创建图像实例# 查看图像实例的属性print(image.fORMat, image.size, image.mode)image.show() # 显示图像

代码解读:

实例属性说明:
format 图像格式
size 图像的 (宽,高) 元组
mode 常见模式,默认 RGB 真彩图像;L 为灰阶图像;CMYK 印刷色彩;RGBA 带透明度的真彩图像;YCbCr 彩色视频格式;LAB L * a * b颜色空间;HSV 等。
show() 方法为使用系统默认图片查看器显示图像,一般用于调试;

2. 从打开文件中读取

可以从文件对象读取而不是文件名,但文件对象必须实现 read( ) seek( )tell( ) 方法,并且是以二进制模式打开。

示例:从文件对象中读取图像

from PIL import Imagewith open("hopper.ppm", "rb") as fp:    im = Image.open(fp)

2. 从 string 二进制流中读取

要从字符串数据中读取图像,需使用 io 类:

import iofrom PIL import Imageim = Image.open(io.StringIO(buffer))

注意:在读取图像 header 之前将文件倒回(使用 seek(0) )。

3. 从tar文件中读取

from PIL import TarIOfp = TarIO.TarIO("Imaging.tar", "Imaging/test/lena.ppm")im = Image.open(fp)

二、读写图像

1. 格式转换并保存图像

Image 模块中的 save 函数可以保存图片,除非你指定文件格式,否则文件的扩展名就是文件格式。

import osfrom PIL import Imageimage_path='python-logo.png' # 图片位置f, e = os.path.splitext(image_path) # 获取文件名与后缀outfile = f + ".jpg"if image_path != outfile:    try:        Image.open(image_path).save(outfile) # 修改文件格式    except IOError:        print("cannot convert", image_path)

注意: 如果你的图片mode是RGBA那么会出现异常,因为 RGBA 意思是红色,绿色,蓝色,Alpha 的色彩空间,Alpha 是指透明度。而 JPG 不支持透明度 ,所以要么丢弃Alpha , 要么保存为.png文件。解决方法将图片格式转换:

Image.open(image_path).convert("RGB").save(outfile)  # convert 转换为 RGB 格式,丢弃Alpha

save() 函数有两个参数,如果文件名没有指定图片格式,那么第二个参数是必须的,他指定图片的格式。

2. 创建缩略图

创建缩略图 使用 Image.thumbnail( size ), size 为缩略图宽长元组。

示例: 创建缩略图

import osfrom PIL import Imageimage_path = 'python-logo.png'  # 图片位置size = (128, 128)  # 文件大小f, e = os.path.splitext(image_path)  # 获取文件名与后缀outfile = f + ".thumbnail"if image_path != outfile:    try:        im = Image.open(image_path)        im.thumbnail(size)  # 设置缩略图大小        im.save(outfile, "JPEG")    except IOError:        print("cannot convert", image_path)

注意: 出现异常,同上一个示例,convert("RGB")转换图片mode。

注意:除非必须,Pillow不会解码或栅格数据。当你打开文件,Pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。这意味着打开文件非常快速,它与文件大小和压缩格式无关。

三、剪贴,粘贴、合并图像

Image类包含允许您操作图像中的区域的方法。

如:要从图像中复制子矩形图像使用 crop() 方法。

1. 从图像复制子矩形

示例: 截取矩形图像

box = (100, 100, 400, 400)region = im.crop(box)

定义box元组,表示图像基于左上角为(0,0)的坐标,box 坐标为 (左,上,右,下)。注意,坐标是基于像素。示例中为 300 * 300 像素。

2. 处理子矩形并将其粘贴回来

示例: 在原图上粘贴子矩形图像

region = region.transpose(Image.ROTATE_180) # 颠倒180度box = (400, 400, 700, 700)  # 粘贴位置,像素必须吻合,300 * 300im.paste(region, box)

注意:将子图(region) 粘贴(paste)回原图时,粘贴位置 box 的像素与宽高必须吻合。而原图和子图的 mode 不需要匹配,Pillow会自动处理。

示例:滚动图像

from PIL import Imagedef roll(image, delta):    """ 向侧面滚动图像 """    xsize, ysize = image.size    delta = delta % xsize    if delta == 0: return image    part1 = image.crop((0, 0, delta, ysize))    part2 = image.crop((delta, 0, xsize, ysize))    image.paste(part1, (xsize - delta, 0, xsize, ysize))    image.paste(part2, (0, 0, xsize - delta, ysize))    return imageif __name__ == '__main__':    image_path = 'test.jpg'    im = Image.open(image_path)    roll(im, 300).show()  # 向侧面滚动 300 像素

3. 分离和合并通道

Pillow 允许处理图像的各个通道,例如RGB图像有R、G、B三个通道。 split 方法分离图像通道,如果图像为单通道则返回图像本身。merge 合并函数采用图像的 mode 和 通道元组为参数,将它们合并成新图像。

示例:交换RGB图像的三个波段

r, g, b = im.split()im = Image.merge("RGB", (b, g, r))

注意:如果要处理单色系,可以先将图片转换为'RGB‘

四. 几何变换

PIL.Image.Image 包含调整图像大小 resize() 和旋转 rotate() 的方法。前者采用元组给出新的大小,后者采用逆时针方向的角度。

示例:调整大小并逆时针旋转 45度

out = im.resize((128, 128))out = out.rotate(45)

要以90度为单位旋转图像,可以使用 rotate()transpose() 方法。后者也可用于围绕其水平轴或垂直轴翻转图像。

示例:

out = im.transpose(Image.FLIP_LEFT_RIGHT) # 水平左右翻转out = im.transpose(Image.FLIP_TOP_BOTTOM) # 垂直上下翻转out = im.transpose(Image.ROTATE_90) # 逆时针90度out = im.transpose(Image.ROTATE_180) # 逆时针180度out = im.transpose(Image.ROTATE_270) # 逆时针270度

rotate() transpose() 方法相同,他们之间没有差别, transpose() 方法比较通用。

五. 颜色变换

示例:mode 之间转换

from PIL import Imageim = Image.open("hopper.ppm").convert("L") # 转换为灰阶图像

注意:它支持每种模式转换为"L" 或 "RGB",要在其他模式之间进行转换,必须先转换模式(通常为“RGB”图像)。

六. 图像增强

1. Filters 过滤器

ImageFilter 模块有很多预定义的增强过滤器,通过 filter() 方法运用。

示例:使用 filter()

from PIL import ImageFilterout = im.filter(ImageFilter.DETAIL)

2. 像素点处理

point() 方法可用于转换图像的像素值(如对比度),在大多数情况下,可以将函数对象作为参数传递格此方法,它根据函数返回值对每个像素进行处理。

示例:每个像素点扩大1.2倍

out = im.point(lambda i: i * 1.2)

上述方法可以用简单的表达式进行图像处理,还可以通过组合 point() paste() 对图像的局部区域进行处理 。

3. 处理单独通道

# 将通道分离source = im.split()R, G, B = 0, 1, 2# 选择红色小于100的区域mask = source[R].point(lambda i: i < 100 and 255)# 处理绿色out = source[G].point(lambda i: i * 0.7)# 粘贴已处理的通道,红色通道仅限于<100source[G].paste(out, None, mask)# 合并图像im = Image.merge(im.mode, source)

注意创建 mask 的语句:

imout = im.point(lambda i: expression and 255)

对于 and 逻辑判断来说,expression False (0) 已经能证明整个表达式为 False (0) , 否则还有对后面的结果进行判断。所以 expression False (0) 返回 False (0) expression 为 True (本身的结果)是返回后面的 255;

同理对于 or 的逻辑判断,当前面的表达式为 True,返回前面的值;当前面表达式为 False,返回后面表达式的值。

七、高级增强

其他图像增强功能可以使用 ImageEnhance 模块中的类。从图像创建后,可以使用 ImageEnhance 快速调整图片的对比度、亮度、饱和度和清晰度。

from PIL import ImageEnhanceenh = ImageEnhance.Contrast(im)  # 创建调整对比度对象enh.enhance(1.3).show("增加30%对比度")

ImageEnhance 方法类型:

ImageEnhance.Contrast(im) 对比度
ImageEnhance.Color(im) 色彩饱和度
ImageEnhance.Brightness(im) 亮度
ImageEnhance.Sharpness(im) 清晰度

八、 动态图像

Pillow 支持一些动态图像处理(如FLI/FLC,GIF等格式)。TIFF文件同样可以包含数帧图像。

打开动态图像时,PIL 会自动加载序列中的第一帧。你可以使用 seek tell 方法在不同的帧之间移动。

示例: 读取动态图像

from PIL import Imageim = Image.open("animation.gif")im.seek(1) # 跳到第二帧try:    while 1:        im.seek(im.tell()+1)  # tell() 获取当前帧的索引号except EOFError: # 当读取到最后一帧时,Pillow抛出EOFError异常。    pass # 结束

注意:有些版本的库中的驱动程序仅允许您搜索下一帧。要回放文件,您可能需要重新打开它。都遇到无法回放的库时,可以使用 for 语句循环实现。

示例for 使用 ImageSequence Iterator 类遍历动态图像

from PIL import ImageSequencefor frame in ImageSequence.Iterator(im):    # ...处理过程...

示例:保存动态图像

im.save(out, save_all=True, append_images=[im1, im2, ...])

参数说明:

out 需要保存到那个文件
save_all 为True,保存图像的所有帧。否则,仅保存多帧图像的第一帧。
append_images 需要附加为附加帧的图像列表。列表中的每个图像可以是单帧或多帧图像( 目前只有GIF,pdf,TIFF和WEBP支持此功能)。

九、Postscript 打印

Pillow 允许通过 Postscript Printer 在图片上添加图像或文字。

from PIL import Imagefrom PIL import PSDrawim = Image.open("test.jpg")title = "hopper"box = (1*72, 2*72, 7*72, 10*72) # in pointsps = PSDraw.PSDraw() # 默认 sys.stdoutps.begin_document(title)# 画出图像 (75 dpi)ps.image(box, im, 75)ps.rectangle(box)# 画出标题ps.setfont("HelveticaNarrow-Bold", 36)ps.text((3*72, 4*72), title)

十、配置加载器 draft

某些解码器允许在从文件中读取图像时对其进行操作。这通常可用于创建缩略图时(当速度比质量更重要)加速解码并打印到单色激光打印机(仅需灰阶图像时)。

draft() 方法操作已打开但尚未加载的图像,使其尽可能匹配给定的模式和大小。它通过重新配置图像解码器来完成。仅适用于JPEG和MPO文件。

示例:使用 draft() 快速解码图像

from PIL import Imageim = Image.open('test.jpg')print("original =", im.mode, im.size)im.draft("L", (100, 100))print("draft =", im.mode, im.size)

输出:

original = RGB (1920, 1200)draft = L (240, 150)

以上是“Python中图像处理Pillow库怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网Python频道!

--结束END--

本文标题: Python中图像处理Pillow库怎么用

本文链接: https://www.lsjlt.com/news/305776.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中图像处理Pillow库怎么用
    这篇文章主要介绍Python中图像处理Pillow库怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言:图像处理是常用的技术,python 拥有丰富的第三方扩展库,Pillow 是 Python3 最常用的图像...
    99+
    2023-06-25
  • Python 图像处理 Pillow 库详情
    前言: 图像处理是常用的技术,python 拥有丰富的第三方扩展库,Pillow 是 Python3 最常用的图像处理库,目前最高版本5.2.0。Python2 使用Pil库,两者是...
    99+
    2024-04-02
  • 怎么在python中利用pillow处理图像
    这篇文章将为大家详细讲解有关怎么在python中利用pillow处理图像,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python有哪些常用库python常用的库:1.requesuts;2...
    99+
    2023-06-14
  • python的Pillow图像处理方法怎么用
    本文小编为大家详细介绍“python的Pillow图像处理方法怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python的Pillow图像处理方法怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、安...
    99+
    2023-06-30
  • Pillow图像颜色处理怎么用
    这篇文章将为大家详细讲解有关Pillow图像颜色处理怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Pillow 提供了颜色处理模块 ImageColor,该模块支持不同格式的颜色,比如 RGB 格式...
    99+
    2023-06-21
  • Python中Pillow库如何进行图像文件处理
    小编给大家分享一下Python中Pillow库如何进行图像文件处理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、打开PyCharm,创建一个新的.py文件2、...
    99+
    2023-06-25
  • Python使用Pillow进行图像处理
    一、概述 PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。 由于PIL仅支持到Pyt...
    99+
    2024-04-02
  • python Pillow图像降噪处理颜色处理
    目录Pillow图像降噪处理模糊处理轮廓图边缘检测浮雕图Pillow图像颜色处理颜色命名Pillow图像降噪处理 由于成像设备、传输媒介等因素的影响,图像总会或多或少的存在一些不必要...
    99+
    2024-04-02
  • Python的Pillow库进行图像文件处理(图文详解)
    目录目标1、打开PyCharm,创建一个新的.py文件2、配置环境3、PIL库概述4、代码段本文详解的讲解了使用Pillow库进行图片的简单处理,使用PyCharm开发Python的...
    99+
    2024-04-02
  • Python图像处理【3】Python图像处理库应用
    Python图像处理库应用 0. 前言1. 将 RGB 图像转换为灰度图像算法1.1 算法原理3.2 算法实现 2. 使用 PIL 库计算图像差异2.1 算法原理2.2 算法实现 ...
    99+
    2023-09-06
    python 图像处理 计算机视觉
  • python 包之 Pillow 图像处理教程分享
    目录一、安装二、打开图片三、转换格式并保存四、创建缩略图五、获取图片属性六、图片信息七、调色板八、画板九、图片模式十、模式转换十一、矩阵模式转换十二、图片尺寸十三、通道分离十四、复制...
    99+
    2024-04-02
  • python中怎么使用Pillow做动态图在图中生成二维码及图像处理
    这篇文章主要讲解了“python中怎么使用Pillow做动态图在图中生成二维码及图像处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中怎么使用Pillow做动态图在图中生成二维...
    99+
    2023-06-29
  • Python详细讲解图像处理的而两种库OpenCV和Pillow
    目录一、简介1.1 图像处理-OpenCV1.2 图像处理- PIL和Pillow二、常用图像类型2.1 二值图像2.2 灰度图像2.3 RGB图像2.4 常用颜色空间简介三、Ope...
    99+
    2024-04-02
  • Python图像处理库PIL怎么使用
    一、 简介1、 基本介绍Pillow 是 Python 中较为基础的图像处理库,主要用于图像的基本处理,比如裁剪图像、调整图像大小和图像颜色处理等。与 Pillow 相比,OpenCV 和 Scikit-image 的功能更为丰富,所以使用...
    99+
    2023-05-14
    Python pil
  • pillow库的主要用途及其在图像处理中的使用概述
    Pillow库:图像处理的利器 引言:在计算机视觉和图像处理领域中,图像处理是一项重要的技术,可以对图像进行各种处理和操作。而Pillow库(PIL)是Python语言中一个强大的图像处理工具,可以实现图像的读取、修改、保存等操...
    99+
    2024-01-13
    应用:图像编辑
  • Pillow图像颜色处理的具体使用
    目录颜色命名getrgb()方法getcolor()示例——修改证件照背景色Pillow 提供了颜色处理模块 ImageColor,该模块支持不同格式的颜色,比如 RGB 格式的颜色...
    99+
    2024-04-02
  • python中 OpenCV和Pillow处理图像操作及时间对比
    目录引言OpenCV和Pillow的优缺点对比读写图像读图像写图像缩放图像旋转图像引言 最近再做图像处理相关的操作的时间优化,用到了OpenCV和Pillow两个库,两个库各有优缺点...
    99+
    2024-04-02
  • Python图像处理之PIL库怎么使用
    本篇内容主要讲解“Python图像处理之PIL库怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python图像处理之PIL库怎么使用”吧!PIL库的使用要点:PIL库是一个具有强大图像处...
    99+
    2023-07-02
  • Python图像处理类库
    本章讲解操作和处理图像的基础知识,将通过大量示例介绍处理图像所需的 Python 工具包,并介绍用于读取图像、图像转换和缩放、计算导数、画图和保存结果等的基本工具。这些工具的使用将贯穿本书的剩余章节。1.1 PIL:Python图像处理类库...
    99+
    2023-01-31
    图像处理 类库 Python
  • Python图像处理库处理步骤
    目录探索Python图像处理库0. 前言1. 利用 scikit-image 绘制图像2. 使用 SciPy 模块裁剪/调整图像大小3. 使用 OpenCV 绘制轮廓3.1 轮廓简介...
    99+
    2023-05-15
    Python图像处理库 Python图像处理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作