Python使用Pillow进行图像处理

 更新时间:2022年06月13日 09:56:15   作者:springsnow  
这篇文章介绍了Python使用Pillow进行图像处理的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、概述

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。

Pillow在PIL的基础上,为Python3增加了更多功能和支持。它支持一系列图像文件格式,如PNG,JPEG,PPM,GIF,TIFF和BMP。我们将看到如何在图像上执行各种操作,例如裁剪,调整大小,添加文本到图像,旋转,灰阶转换。

Ps:我喜欢OpenCV的速度与强大的图像处理功能,但是要在OpenCV中使用我们自己喜欢的字体似乎并不容易(预设的字体实在令人退避三舍)。

Pillow的Github主页:https://github.com/python-pillow/Pillow

Pillow的文档(对应版本v3.0.0): https://pillow.readthedocs.org/en/latest/handbook/index.html

1. PIL/ Pillow

PIL( Python图像库 )是Python编程语言的一个免费库,它支持打开、操作和保存许多不同的文件格式的图像。然而, 随着2009年的最后一次发布,它的开发停滞不前。但幸运的是还有有Pillow,一个PIL积极开发的且更容易安装的分支,它能运行在所有主要的操作系统,并支持Python3。这个库包含了基本的图像处理功能,包括点运算、使用一组内置卷积核的滤波和色彩空间的转换。

资源

文档中有安装说明,以及涵盖库的每个模块的示例:

https://pillow.readthedocs.io/en/stable/releasenotes/3.1.1.html

2. OpenCV-Python

OpenCV( 开源计算机视觉库 )是计算机视觉应用中应用最广泛的库之一 。OpenCV-Python 是OpenCV的python版API。OpenCV-Python的优点不只有高效,这源于它的内部组成是用C/C++编写的,而且它还容易编写和部署(因为前端是用Python包装的)。这使得它成为执行计算密集型计算机视觉程序的一个很好的选择。
资源

OpenCV-Python-Guide指南可以让你使用OpenCV-Python更容易:

https://github.com/abidrahmank/OpenCV2-Python-Tutorials

3. SimpleCV

SimpleCV 也是一个用于构建计算机视觉应用程序的开源框架。有了它,你就可以访问几个高性能的计算机视觉库,如OpenCV,而且不需要先学习了解位深度、文件格式、颜色空间等。

它的学习曲线大大小于OpenCV,正如它们的口号所说“计算机视觉变得简单”。一些支持SimpleCV的观点有:

即使是初学者也可以编写简单的机器视觉测试
摄像机、视频文件、图像和视频流都是可互操作的

资源

官方文档非常容易理解,而且有大量的例子和使用案例去学习:

https://simplecv.readthedocs.io/en/latest/

安装Pillow

如果安装了Anaconda,Pillow就已经可用了。否则,需要在命令行下通过pip安装:

$ pip install pillow

如果遇到Permission denied安装失败,请加上sudo重试。

操作图像

来看看最常见的图像缩放操作,只需三四行代码:

from PIL import Image

# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 获得图像尺寸:
w, h = im.size
print('Original image size: %sx%s' % (w, h))
# 缩放到50%:
im.thumbnail((w//2, h//2))
print('Resize image to: %sx%s' % (w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
im.save('thumbnail.jpg', 'jpeg')

其他功能如切片、旋转、滤镜、输出文字、调色板等一应俱全。

比如,模糊效果也只需几行代码:

from PIL import Image, ImageFilter

# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 应用模糊滤镜:
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg', 'jpeg')

效果如下:

PIL的ImageDraw提供了一系列绘图方法,让我们可以直接绘图。比如要生成字母验证码图片:

from PIL import Image, ImageDraw, ImageFont, ImageFilter

import random

# 随机字母:
def rndChar():
    return chr(random.randint(65, 90))

# 随机颜色1:
def rndColor():
    return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))

# 随机颜色2:
def rndColor2():
    return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))

# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
    for y in range(height):
        draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
    draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

我们用随机颜色填充背景,再画上文字,最后对图像进行模糊,得到验证码图片如下:

如果运行的时候报错:

IOError: cannot open resource

这是因为PIL无法定位到字体文件的位置,可以根据操作系统提供绝对路径,比如:

'/Library/Fonts/Arial.ttf'

要详细了解PIL的强大功能,请请参考Pillow官方文档:

https://pillow.readthedocs.org/

到此这篇关于Python使用Pillow进行图像处理的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python实现校园网自动登录的脚本分享

    Python实现校园网自动登录的脚本分享

    这篇文章主要和大家分享一个Python脚本,leukemia实现校园网自动登录功能。文中的示例代码简洁易懂,快跟随小编一起动手尝试一下吧
    2022-06-06
  • python益智游戏计算汉诺塔问题示例

    python益智游戏计算汉诺塔问题示例

    汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
    2014-03-03
  • python实现得到当前登录用户信息的方法

    python实现得到当前登录用户信息的方法

    这篇文章主要介绍了python实现得到当前登录用户信息的方法,结合实例形式分析了Python在Linux平台以及Windows平台使用相关模块获取用户信息的相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • Django基础知识 URL路由系统详解

    Django基础知识 URL路由系统详解

    这篇文章主要介绍了Django基础知识 URL路由系统详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 利用Python开发一个自动答题程序

    利用Python开发一个自动答题程序

    这篇文章主要为大家详细介绍了如何利用Python开发一个自动答题程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-02-02
  • python爬虫爬取监控教务系统的思路详解

    python爬虫爬取监控教务系统的思路详解

    这篇文章主要介绍了python爬虫监控教务系统,主要实现思路是对已有的成绩进行处理,变为list集合,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2020-01-01
  • Python判断对象是否为文件对象(file object)的三种方法示例

    Python判断对象是否为文件对象(file object)的三种方法示例

    这篇文章主要介绍了Python判断对象是否为文件对象(file object)的三种方法示例,https://www.pythontab.com/html/2018/pythonhexinbiancheng_1015/1362.html
    2019-04-04
  • Django框架视图介绍与使用详解

    Django框架视图介绍与使用详解

    这篇文章主要介绍了Django框架视图介绍与使用,结合实例形式分析了Django框架视图的功能、配置、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-07-07
  • 拒绝盗图!教你怎么用python给图片加水印

    拒绝盗图!教你怎么用python给图片加水印

    你是不是担心,辛辛苦苦做的图表被盗用? 试试用python加上你的专属水印,让盗版无所遁形. 只需几行代码,比用ps软件操作更简单、更快捷,需要的朋友可以参考下
    2021-06-06
  • python 爬取微信文章

    python 爬取微信文章

    本文给大家分享的是使用python通过搜狗入口,爬取微信文章的小程序,非常的简单实用,有需要的小伙伴可以参考下
    2016-01-01

最新评论