Python图像处理入门:

第一章 PIL/Pillow的基本用法

Python用于数字图像处理时,常用的一个第三方库是PIL,全称为:Python Imaging Library。 PIL由Fredrik Lundh和一些志愿者开发,是Python平台一个功能较强而简单易用的图像处理库,但好像只能支持到Python 2.7版。后来Alex Clark和一些志愿者开发了PIL的一个Fork(大概为 “克隆”的意思),创建了兼容 Python 3 的Pillow。“Pillow is the friendly PIL fork”,这是[1]的第一句。

在图像处理方面,Pillow包含了基本的功能,包括点操作、用卷积核进行过滤、色彩空间转换等。 该库也支持图像的大小调整、旋转和任意仿射变换。 还可以通过直方图方法从图像中提取一些统计信息,用于自动对比度增强和全局统计分析。

本文是笔者学习和练习Pillow的笔记,软件环境是Windows10,PyCharm社区版和Jupyter Lab。主要内容来自文献 [1-2],并参考了[3]-[8]等文献。

注意,安装Pillow 之前,必须先卸载 PIL,具体的安装和升级方法可参见[1]中的Installation。

第一节 Pillow功能简介

Pillow库包含基本的图像处理功能,包括点操作、使用一组内置卷积核进行过滤以及色彩空间转换。 该库还支持图像大小调整、旋转和任意仿射变换。 有一种直方图方法允许您从图像中提取一些统计信息。 这可用于自动对比度增强和全局统计分析。

1使用图像类(Using the Image class)

PIL中最重要的类是 Image 类,在一个同名的模块中定义。可以通过多种方式创建此类的实例,例如从图像文件加载图像,处理其他图像,或创建新图像。 从图像文件加载图像时要使用 Image 模块中的 open() 函数:

>>> from PIL import Image

>>> im = Image.open("hopper.ppm")

如果成功,此函数将返回一个 Image 对象。 您现在可以使用实例属性来检查文件内容:

>>> print(im.format, im.size, im.mode)

PPM (512, 512) RGB

其中,format 属性用来标识图像来源,如果图像并不是从文件中读取的则其值为 None;size 属性是一个包含宽度和高度(以像素为单位)的 2 元数组; mode 属性给出图像中通道的数量和像素类型等信息。 常见的模式有“L”(亮度)用于灰度图像,“RGB”用于真彩色图像,“CMYK”用于印前图像。

如果无法打开文件,则会引发 OSError 异常。一旦有了 Image 类的实例,就可以使用该类的方法来处理和操作图像。 例如,让我们显示刚刚加载的图像:

>>> im.show()

2图像的读写(Reading and writing images) - Image类的open()和save()方法

PIL支持多种图像文件格式。 从磁盘读取文件,应使用 Image 对象的 open()方法,保存文件则用 save() 方法。在这两个方法中,绝对路径和相对路径都可以使用。

--------------------------------------------------------

例1

from PIL import Image

im = Image.open("./雪山草原.jpg")   # 使用相对路径
print(im.size, im.mode, im.format, type(im))
# (532, 492) RGB JPEG <class 'PIL.JpegImagePlugin.JpegImageFile'>
im.show()

---------------------------------------------------------

  

雪山草原.jpg                            雪山草原_gray.png

例2

im_g = im.convert('L')  #  把例1的jpg彩色图像im转换成黑白灰度图像im_g

print(im_g.size, im_g.mode, im_g.format, type(im_g))
# (532, 492) L None <class 'PIL.Image.Image'>

#保存im_g,这里使用了绝对路径。我们使用扩展名 .png,使得文件被保存为png格式的文件。

im_g.save('D:\PYthon\pythonProject\Py-ImagePro\配套代码\雪山草原_gray.png')

# 打开并显示雪山草原_gray.png

imm = Image.open("./雪山草原_gray.png")
print(imm.size, imm.mode, imm.format, type(imm))
# (532, 492) L PNG <class 'PIL.PngImagePlugin.PngImageFile'>
imm.show()

----------------------------------------------------------

注1:save() 可以接收第二个参数,用于指定文件格式。使用非标准扩展名时,必须以这种方式指定格式。

----------------------------------------------------------

例3  把im_g保存为'JPEG'格式的图像文件: 雪山草原_gray.pm

im_g = im.convert('L')  #  把例1的png彩色图像im转换成黑白灰度图像im_g然后保存到文件夹,

im_g.save('./雪山草原_gray.pm', 'JPEG')

imm = Image.open("./雪山草原_gray.pm")

print(imm.size, imm.mode, imm.format, type(imm))

# (532, 492) L JPEG <class 'PIL.JpegImagePlugin.JpegImageFile'>

imm.show()

-------------------------------------------------------------

由于扩展名为pm,Windows的照片软件不能识别此文件,但仍可用IE打开,如上图。

将文件转换为 JPEG

例4  用法参见例6

--------------------------------------------------

import os, sys

from PIL import Image

for infile in sys.argv[1:]:

f, e = os.path.splitext(infile)

outfile = f + ".jpg"

if infile != outfile:

try:

with Image.open(infile) as im:

im.save(outfile)

except OSError:

print("cannot convert", infile)

----------------------------------------------

创建 JPEG 缩略图

例5  用法参见例6 ,sys.argv[1:]参见注3

-----------------------------------

import os, sys

from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:

outfile = os.path.splitext(infile)[0] + ".thumbnail"

if infile != outfile:

try:

with Image.open(infile) as im:

im.thumbnail(size)

im.save(outfile, "JPEG")

except OSError:

print("cannot create thumbnail for", infile)

--------------------------------------

注2,除非确实需要,PIL不会加载所有的图像数据。打开文件时,它会先读取文件头以确定文件格式并提取解码文件所需的模式、大小和其他属性等信息。

例6 为两个图像文件创建缩略图,在命令窗口中操作

1)当前文件夹没有.thumbnail文件,但有4个.jpg图像文件如下:

---------------------------------------------------

D:\PYthon\pythonProject\Py-ImagePro\配套代码>dir *.jpg

2021/08/10  17:34           147,512 face.jpg

2021/06/01  18:23            70,780 hill.jpg

2021/06/08  16:12            24,958 messi.jpg

2021/08/10  17:35            22,177 parrot.jpg

4 个文件        265,427 字节

2)我们在当前目录建立了一个文件test.py,其内容就是例5中的语句;

3)在当前目录执行语句 python test.py face.jpg hill.jpg  如下

D:\PYthon\pythonProject\Py-ImagePro\配套代码>python test.py face.jpg hill.jpg

4)可以看到当前目录刚刚新增了两个thumbnail文件

D:\PYthon\pythonProject\Py-ImagePro\配套代码>dir *.thumbnail

D:\PYthon\pythonProject\Py-ImagePro\配套代码 的目录

2021/08/22  11:42             4,061 face.thumbnail

2021/08/22  11:42             1,458 hill.thumbnail

2 个文件          5,519 字节

---------------------------------------------------------------------------

注3, sys.argv其实就是一个元组,里边的项为用户输入的参数。注意参数是从程序外部输入的,而与代码本身无关。将程序保存后从外部来运行并列出参数,就可以看到它的效果。参见例6

识别图像文件

例7  用法参见例6,该程序可用于判别一组文件是否图像文件

--------------------------------------

import sys

from PIL import Image

for infile in sys.argv[1:]:

try:

with Image.open(infile) as im:

print(infile, im.format, f"{im.size}x{im.mode}")

except OSError:

pass

----------------------------------------------

3 剪切、粘贴与合并Cutting, pasting, and merging images

Image 类包含操作图像中的区域的方法。 从图像中提取子矩形可用crop() 方法。

(待续)

python图像处理之一 - Pillow的基本用法相关推荐

  1. Python图像处理模块pillow子模块Image用法精要

    Image是pillow库中一个非常重要的模块,提供了大量用于图像处理的方法.使用该模块时,首先需要导入. >>> from PIL import Image 接下来,我们通过几个示 ...

  2. pillow是python的图像处理标准库_详解Python图像处理库Pillow常用使用方法

    pil(python image library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:pil. pil ...

  3. pillow属于python标准库吗_详解Python图像处理库Pillow常用使用方法

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:PIL. PIL ...

  4. pil对图像加透明 python_使用Python图像处理库Pillow处理图像文件

    文/江红  本文来源<Python程序设计与算法基础教程(第2版)-微课版> 本案例通过使用Python图像处理库Pillow,帮助读者进一步了解Python的基本概念:模块.对象.方法和 ...

  5. nodejs 图片处理模块 rotate_学会Pillow再也不用PS啦——Python图像处理库Pillow入门!...

    你在用什么软件进行图像处理呢?厌倦了鼠标和手指的拖拖点点,想不想用程序和代码进行图像的高效处理,Python作为简单高效又很强大的一门编程语言,对于图像的处理自然也是轻松拿下,听起来是不是很酷很极客, ...

  6. 简单实用的Python图像处理库Pillow

    Pillow图像处理 Pillow 库的安装 图象处理基本知识 图像的RGB 色彩模式 像素阵列 Image 模块 打开和新建 混合 透明度混合处理 遮罩混合处理 复制和缩放 复制图像 缩放像素 缩放 ...

  7. python 图像处理模块pillow

    PIL:python imageing library,是python的基本图像处理库,PIL功能强大,API简单易用.由于PIL只支持python2.7,因此一群志愿者在PIL的基础上创建了新的版本 ...

  8. Python图像处理库Pillow(PIL)的简单使用

    一.PIL和Pillow图像处理库 图像库PIL(Python Image Library)是Python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像 ...

  9. python头像变二维码_Python 图像处理库 pillow,提取支付宝和微信支付图片二维码...

    下面就是微信支付的收款二维码: 有时候我们仅仅只想要图片中间的方形二维码部分,为了提取出中间部分,我们可以使用图片处理软件,但图片处理软件不利于批处理,且学习也需要一定成本.本文将教你使用 Pytho ...

  10. python 图像处理(从安装Pillow开始)

    python 图像处理(从安装Pillow开始) python2.x及以下用的是PIL(图像处理库是 PIL(Python Image Library)),最新版本是 1.1.7  可在http:// ...

最新文章

  1. mysql忘记密码,如何重置密码
  2. 用键盘上下左右键和ctrl键移动TreeView节点
  3. Mac终端下打开sublime
  4. 【转载】10个最“优秀”的代码注释
  5. 工作占用了太多私人时间_职晓|如果工作占用了生活时间,我应不应该辞职?...
  6. FZU 1402 猪的安家 中国剩余定理
  7. 接口返回500一般是什么错_什么情况下?超过了500万元的销售额标准,也不用办理一般纳税人资格认定?...
  8. 阿里云张献涛:2021 弹性计算发生了哪些变化
  9. 南丁格尔图文字颜色跟随
  10. 通过搭建FTP站点实现上传与下载
  11. Android Jetpack中CameraX保存Bitmap
  12. Android 关于佳博和汉印蓝牙热敏打印机开发
  13. Springboot与Kafka的小插曲
  14. CorelDRAW中如何安装字体
  15. Intellij IDEA File Cache Conflict
  16. 电信主机计费系统_数据采集子模块
  17. 手机运行慢可以刷机吗_安卓手机反应慢怎么处理刷机有用吗(一个“动作”就能轻松解决,比新买的速度还快)...
  18. 使用纵横网络QQ群成员提取器进行邮件群发
  19. springboot 添加第三方jar包
  20. 易速还原3.0核心版发布

热门文章

  1. jetlinks之Thing(六)
  2. vue实现更换背景图片_Vue实现背景更换颜色操作
  3. 网易云音乐安装完成以后点击图标打不开的解决办法
  4. cygwin mysql_cygwin 安装 mysql
  5. flask之session、cookie摘抄笔记
  6. 读《因果的真相》第五章摘抄笔记
  7. 量化基金投资常用策略简介
  8. 论文总结与展望怎么写?
  9. 微信开发(微信扫一扫)商品创建
  10. uniapp H5端与APP端压缩图片