Python图像处理-Pillow

什么是验证码?

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写。
是一种用来区分用户是计算机还是人的公共全自动程序。

验证码的作用
认证码是一种人机识别手段,最终目的是区分正常用户和机器的操作。
可以防止:恶意破解密码、注册、刷票、论坛灌水,防止黑客对用户的密码进行暴力破解。
一般是提出一个问题,这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答这个的问题,所以回答出问题的用户就可以被认为是人类。
验证码的类别

验证码自面世以来就一直在更新,迭代。
图形验证码:这类验证码大多是计算机随机产生一个字符串,在把字符串增加噪点、干扰线、变形、重叠、不同颜色、扭曲组成一张图片来增加识别难度。
滑动验证码:也叫行为验证码,比较流行的一种验证码,通过用户的操作行为来完成验证,其中最出名的就是极验。
滑动验证码的原理就是使用机器学习中的深度学习技术,根据一些特征来区分是否为正常用户。通过记录用户的滑动速度,还有每一小段时间的瞬时速度,用户鼠标点击情况,以及滑动后的匹配程度来识别。而且,不是说滑动到正确位置就是验证通过,而是根据特征识别来区分是否为真用户,滑到正确位置只是一个必要条件。
点触验证码:点击类验证码都是给出一张包含文字的图片,通过文字提醒用户点击图中相同字的位置进行验证。

简介

Python传统的图像处理库PIL(Python Imaging Library),可以说基本上是Python处理图像的便准库,功能强大,使用简单。

但是由于PIL不支持Python3,而且更新缓慢。所以由志愿者在PIl的基础上创建了一个分支版本,命名为Pillow,Pillow目前最新支持到

Python3.6,更新活跃,并且增加了许多新的特性。所以在这里讲解一下Pillow库



安装

命令行pip安装

pip install Pillow

但是需要注意一点,Pillow和PIL是不能共存在一个环境中的,所以如果安装有PIL的话,需要先把PIL卸载掉,也不用担心更能问题,

Pillow具备PIL绝大多数的方法,卸载命令

pip uninstall PIL

由于是继承PIL的分支,所以Pillow的导入是这样的:

import PIL

#或者是

from PIL import Image


使用手册

Image

Image是Pillow中最为重要的类,实现了Pillow中大部分的功能。要创建这个类的示例主要有三个方法:

  1. 从文件加载图片

  2. 处理其他图像获得

  3. 创建一个新的图像

读取图像

一般来说,我们都是通过文件加载图像来实例化这个类,如下所示:

from PIl import Image
picture = Image.open(‘test.png‘)

如果没有指定图片格式的话,那么Pillow会自动识别文件内容为文件格式。

新建图像

Pillow新建空白图像使用new()方法,第一个参数是mode即颜色空间模式,第二个参数指定了五项的分辨率(宽x高),第三个参数是颜色。

- 可以直接填入常用的颜色的名称。如‘red‘。

- 也可以填入十六进制表示的颜色,如#F0000表示红色。

- 还能传入元组,比如(255,0,0,255)或者(255,0,0)表示红色。

picture = Image.new(‘RGB‘, (200, 100), ‘red‘)

保存图片

保存图片的话需要使用save()方法:

picture.save(‘test.png‘)

保存的时候,如果没有指定图片格式的话,那么Pillow会根据输入的后缀名决定保存的文件格式。

 图像的坐标表示

- 在Pillow中,用的是图像左上角的坐标的原点(0,0).所以这意味着,x轴的数值是从左到右增长的,y轴的数值是从上到下增长的。

- 我们处理图像时,常常需要去表示一个矩形的图像区域。Pillow中很多的方法都需要传入一个表示矩形区域的元组参数。

- 这个元组参数包含四个值,分别代表矩形四条边的距离X轴或者Y轴的距离。顺序是(左,顶,右,底)。其实就相当于,

矩形的左上顶点坐标为(左,顶),矩形的右下顶点坐标为(右,底),两个顶点就可以确定一个矩形的位置。

- 右和底坐标稍微特殊,跟python列表索引规则一样,是左闭右开的。可以理解为[左, 右)[顶, 底)这样左闭右开的区间。

比如(3, 2, 8, 9)就表示了横坐标范围[3, 7];纵坐标范围[2, 8]的矩形区域。

常用属性

  • PIL.Image.filename

    打印图像源文件的文件名或者路径,只有使用open()方法创建的对象有这个属性。

    类型:字符串

  • PIL.Image.format

    图像源文件的文件格式。

  • PIL.Image.mode

    图像的模式,一般来说是“1”, “L”, “RGB”, 或者“CMYK” 。

  • PIL.Image.size

    图像的大小

  • PIL.Image.width

    图像的宽度

  • PIL.Image.height

    图像的高度

  • PIL.Image.info

    图像的一些信息,为字典格式

常用方法

裁剪图片

Image使用crop()方法来裁剪图像,此方法需要传入一个矩形元祖参数,返回一个新的Image对象,对原图没有影响。

croped_im = img.crop((50, 60, 400, 218))

原图片:

裁剪以后:

复制与粘贴图像

复制图像使用copy()方法:

copyed_im = im.copy()

粘贴图像使用paste()方法:

croped_im = im.crop((50, 60, 400, 218))
im.paste(croped_im, (0, 0))

im对象调用了paste()方法,第一个参数是被裁剪下来用来粘贴的图像,第二个参数是一个位置参数元祖,这个位置参数是粘贴的图像的左顶点。

调整图像的大小

调整图像大小使用resize()方法:

resized_im = im.resize((width, height))

resize()方法会返回一个重设了大小的Image对象。

或者使用thumbnail()方法:

im = Image.open(‘test.jpg‘)
#获得图像尺寸
w, h = im.size
# 缩放到50%
im.htumbnail((w//2, h//2))
#显示图片
im.show()  

thumbnail() 方法可以用来制作缩略图。它接受一个二元数组作为缩略图的尺寸,然后将示例缩小到指定尺寸

旋转图像和翻转图像

旋转图像使用rotate()方法,此方法按逆时针旋转,并返回一个新的Image对象:

# 逆时针旋转90度
im.rotate(90)
im.rotate(180)
im.rotate(20, expand=True)

inn = img.rotate(90)

旋转的时候,会将图片超出边界的边角裁剪掉。如果加入expand=True参数,就可以将图片边角保存住。

翻转图像使用transpose()

# 水平翻转
im.transpose(Image.FLIP_LEFT_RIGHT)
# 垂直翻转
im.transpose(Image.FLIP_TOP_BOTTOM)

获得图片通道名称

im.getbands()

通过通道分割图片

split()

split()可以将多通道图片按通道分割为单通道图片。返回各个通道的灰度图组成的元组

R, G, B = im.split()

split()方法返回的是一个元祖,元祖中的元素则是分割后的单个通道的图片。

getchannel(channel)

getchannel()可以获取单个通道的图片:

R = im.getchannel("R")

模式转化

img = im.convert("L")   

获取单个像素的值

使用getpixel(xy)方法可以获取单个像素位置的值:

im.getpixel((100, 100))

传入的xy需要是一个元祖形式的坐标。

如果图片是多通道的,那么返回的是一个元祖。

L模式经常用来处理图像识别,数据方便分析处理

加载图片全部数据

我们可以使用load()方法加载图片所有的数据,并比较方便的修改像素的值:

pixdata = im.load()
pixdata[100,200] = 255
 

此方法返回的是一个PIL.PyAccess,可以通过这个类的索引来对指定坐标的像素点进行修改。

获取全部像素内容

getdata(band = None) 方法,用来获取 Image 类的对象中的像素内容

该方法会将图片中的像素内容,逐行逐行地拼接起来,作为一个完整的序列返回。方法的返回类型,是 PIL 库的内部类型。我们可以用 list(im.getdata()) 得到标准的 Python list 对象。

band 意味「通道」。当 band = None 时,方法返回所有通道的像素内容;当 band = 0时,则返回第一个通道的像素内容。例如,对于 RGB 模式的位图,band = 0 返回 R 通道的内容;band = 2 返回 B 通道的内容。

from PIL import Image
?
im = Image.open(‘test.jpg‘)
print(im.getdata())  #获取所有通道的值 类似生成器的对象
print(list(im.getdata(0)))  #获取第一个通道的值, 转化为列表

关闭图片并释放内存

此方法会删除图片对象并释放内存

im.close()

原文地址:https://www.cnblogs.com/pywjh/p/9778912.html

时间: 2024-10-16 04:08:23

Python图像处理-Pillow的相关文章

windows环境中python的pillow(PIL)包安装

突然想玩下python图像处理的功能.电脑的windows64位操作系统安装了python2.7. 很兴奋的打开cmd要试下PIL个python中的图像处理模块,结果木有这个模块.-.-!! 木有办法,只好安装咯.在网上搜了下找到了PIL官网,下了一个[PIL-1.1.7.win32-py2.7.exe] 拿来运行下.结果是介个样纸的(#°Д°)- (#°Д°)- : so又在度娘上一顿狂搜,呵呵,原来有很多人已经干过同样的事了,而且还留下了解决办法: 来这里http://www.lfd.uci

Python图像处理库PIL中图像格式转换(一)

在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL来实现不同图像格式的转换. 对于彩色图像,不管其图像格式是PNG,还是BMP,或者JPG,在PIL中,使用Image模块的open()函数打开后,返回的图像对象的模式都是"RGB".而对于灰度图像,不管其图像格式是PNG,还是BMP,或者JPG,打开后,其模式为"L". 通

Python图像处理库(1)

转自:http://www.ituring.com.cn/tupubarticle/2024 第 1 章 基本的图像操作和处理 本章讲解操作和处理图像的基础知识,将通过大量示例介绍处理图像所需的 Python 工具包,并介绍用于读取图像.图像转换和缩放.计算导数.画图和保存结果等的基本工具.这些工具的使用将贯穿本书的剩余章节. 1.1 PIL:Python图像处理类库 PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图

Python图像处理类库

本章讲解操作和处理图像的基础知识,将通过大量示例介绍处理图像所需的 Python 工具包,并介绍用于读取图像.图像转换和缩放.计算导数.画图和保存结果等的基本工具.这些工具的使用将贯穿本书的剩余章节. 1.1 PIL:Python图像处理类库 PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放.裁剪.旋转.颜色转换等.PIL 是免费的,可以从 http://www.pythonware.com/pr

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

python2.x及以下用的是PIL(图像处理库是 PIL(Python Image Library)),最新版本是 1.1.7  可在http://www.pythonware.com/products/pil/index.htm 下载和学习. 不过从该网站可看出它不支持python3.x Pillow由PIL而来(支持3.x),所以该导入该库使用import PIL 由于本人用的是python 3.4 所以下载的Pillow 关于下载第三方库,有三种方法,之前用的都是 第一种方法 1 下载第

Python图像处理库Pillow常用使用方法

PIL(Python Imaging Library)是Python一个强大方便的图像处理库,只支持到Python2.7.Pillow是PIL的一个派生分支,在Python3标准库中用Pillow代替PIL.Pillow官网:https://pillow.readthedocs.io/en/latest/handbook/index.html 下面是使用例子,用法可见代码注释. from PIL import Image,ImageFilter,ImageGrab,ImageDraw,Image

Python图像处理库:Pillow 初级教程

2014-09-14 翻译 http://pillow.readthedocs.org/en/latest/handbook/tutorial.html Pillow由PIL而来,所以该导入该库使用import PIL 本文相关的代码:https://github.com/445141126/pillow_example Image类 Pillow中最重要的类就是Image,该类存在于同名的模块中.可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片. 使用Ima

python图像处理之PIL库

PIL库是python语言第三方库,需要通过pip工具安装,安装库的名字是pillow. PIL库支持图像存储,显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放,裁剪,叠加以及向图像添加线条,图像和文字等操作. 功能需求: 图像归档:对图像进行批处理,生成图像预览,图像格式转换等. 图像处理:图像基本处理,像素处理,颜色处理等. PIL库Image类解析 导入方法:from PIL import Image 要加载一个图像文件,最简单的形式如下,之后所有操作对im起作用 from P

Python图像处理(1):替换OpenCV

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 先前构造图像处理开发环境的时候,用一个别人编译好的安装包将OpenCV安装到了c:\python27\lib\site-packages目录下,但这个OpenCV没有符号表,无法进行C/C++的代码调试.我们用VS编译的OpenCV替换它. 首先修改OpenCV的Python接口工程,将其输出到python的库目录下,