python pillow模块使用方法详解


Posted in Python onAugust 30, 2019

pillow

Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。pillow可以说已经取代了PIL,将其封装成python的库(pip即可安装),且支持python2和python3,目前最新版本是3.0.0。

Pillow的Github主页:https://github.com/python-pillow/Pillow
Pillow的文档(对应版本v3.0.0):

https://pillow.readthedocs.org/en/latest/handbook/index.html

安装它很简单 pip install pillow

使用方式:

#python2 
import Image 
#python3(因为是派生的PIL库,所以要导入PIL中的Image) 
from PIL import Image

以python3为例,

open

from PIL import Image
im = Image.open("1.png")
im.show()

format

format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。如果文件不能打开,则抛出IOError异常。

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

save

im.save("c:\\")

convert()

convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种:
· 1 (1-bit pixels, black and white, stored with one pixel per byte)
· L (8-bit pixels, black and white)
· P (8-bit pixels, mapped to any other mode using a colour palette)
· RGB (3x8-bit pixels, true colour)
· RGBA (4x8-bit pixels, true colour with transparency mask)
· CMYK (4x8-bit pixels, colour separation)
· YCbCr (3x8-bit pixels, colour video format)
· I (32-bit signed integer pixels)
· F (32-bit floating point pixels)

im = Image.open('1.png').convert('L')

Filter

from PIL import Image, ImageFilter 
im = Image.open(‘1.png') 
# 高斯模糊 
im.filter(ImageFilter.GaussianBlur) 
# 普通模糊 
im.filter(ImageFilter.BLUR) 
# 边缘增强 
im.filter(ImageFilter.EDGE_ENHANCE) 
# 找到边缘 
im.filter(ImageFilter.FIND_EDGES) 
# 浮雕 
im.filter(ImageFilter.EMBOSS) 
# 轮廓 
im.filter(ImageFilter.CONTOUR) 
# 锐化 
im.filter(ImageFilter.SHARPEN) 
# 平滑 
im.filter(ImageFilter.SMOOTH) 
# 细节 
im.filter(ImageFilter.DETAIL)

查看图像直方图

im.histogram()

转换图像文件格式

def img2jpg(imgFile):  
   if type(imgFile)==str and imgFile.endswith(('.bmp', '.gif', '.png')):
     with Image.open(imgFile) as im:
       im.convert('RGB').save(imgFile[:-3]+'jpg')  
 img2jpg('1.gif')
 img2jpg('1.bmp')
 img2jpg('1.png')

屏幕截图

from PIL import ImageGrab 
im = ImageGrab.grab((0,0,800,200)) #截取屏幕指定区域的图像 
im = ImageGrab.grab() #不带参数表示全屏幕截图

图像裁剪与粘贴

box = (120, 194, 220, 294) #定义裁剪区域 
region = im.crop(box) #裁剪 
region = region.transpose(Image.ROTATE_180) 
im.paste(region,box) #粘贴

图像缩放

im = im.resize((100,100)) #参数表示图像的新尺寸,分别表示宽度和高度

图像对比度增强

from PIL import Image 
from PIL import ImageEnhance 

#原始图像 
image = Image.open('lena.jpg') 
image.show() 

#亮度增强 
enh_bri = ImageEnhance.Brightness(image) 
brightness = 1.5 
image_brightened = enh_bri.enhance(brightness) 
image_brightened.show() 

#色度增强 
enh_col = ImageEnhance.Color(image) 
color = 1.5 
image_colored = enh_col.enhance(color) 
image_colored.show() 

#对比度增强 
enh_con = ImageEnhance.Contrast(image) 
contrast = 1.5 
image_contrasted = enh_con.enhance(contrast) 
image_contrasted.show() 

#锐度增强 
enh_sha = ImageEnhance.Sharpness(image) 
sharpness = 3.0 
image_sharped = enh_sha.enhance(sharpness) 
image_sharped.show()

Image模块用法介绍

1. 简介。

图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴。PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前版本为 1.1.7,我们可以 在这里 下载学习和查找资料。

Image 类是 PIL 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法。

2. 使用。

导入 Image 模块。然后通过 Image 类中的 open 方法即可载入一个图像文件。如果载入文件失败,则会引起一个 IOError ;若无返回错误,则 open 函数返回一个 Image 对象。现在,我们可以通过一些对象属性来检查文件内容,即:

>>> import Image
>>> im = Image.open("j.jpg")>>> im.show()
>>> print im.format, im.size, im.mode
JPEG (440, 330) RGB

这里有三个属性,我们逐一了解。

format : 识别图像的源格式,如果该文件不是从文件中读取的,则被置为 None 值。

size : 返回的一个元组,有两个元素,其值为象素意义上的宽和高。

mode : RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。

from PIL import Image
from PIL import ImageEnhance
import pytesseract
import re
pytesseract.pytesseract.tesseract_cmd = 'D:\\Program Files\\Tesseract-OCR\\tesseract.exe'
tessdata_dir_config = '--tessdata-dir "D:\\Program Files\\Tesseract-OCR\\tessdata"'
im=Image.open("./img/10.jpg")
im=im.convert('L')
im.show()
im=ImageEnhance.Contrast(im)
im=im.enhance(1)
#im = im.resize((300, 90))
ltext = pytesseract.image_to_string(im)
ltext = re.sub("\W", "", ltext)
im.show()
print(ltext)
#print(pytesseract.image_to_string(im))
#print(pytesseract.image_to_boxes(im))
#print(im.format, im.size, im.mode)

convert() : 该函数可以用来将图像转换为不同色彩模式。

ImageEnhance.Contrast(im):使用ImageEnhance可以增强图片的识别率

其他

简单的几何变换。

>>>out = im.resize((128, 128))           #调整图片大小
>>>out = im.rotate(45)               #逆时针旋转 45 度角。
>>>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 度角。

序列图像。

即我们常见到的动态图,最常见的后缀为 .gif ,另外还有 FLI / FLC 。PIL 库对这种动画格式图也提供了一些基本的支持。当我们打开这类图像文件时,PIL 自动载入图像的第一帧。我们可以使用 seek 和 tell 方法在各帧之间移动。

import Image
im.seek(1)    # skip to the second frame
try:
  while 1:
    im.seek( im.tell() + 1)
    # do something to im
except EOFError:
  pass

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用urlparse分析网址中域名的方法
Apr 15 Python
python实现web方式logview的方法
Aug 10 Python
Python简单的制作图片验证码实例
May 31 Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
python数据挖掘需要学的内容
Jun 23 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
Django之模板层的实现代码
Sep 09 Python
使用Python实现分别输出每个数组
Dec 06 Python
selenium+python配置chrome浏览器的选项的实现
Mar 18 Python
Python3爬虫RedisDump的安装步骤
Feb 20 Python
docker-py 用Python调用Docker接口的方法
Aug 30 #Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 #Python
Django获取应用下的所有models的例子
Aug 30 #Python
Django自带日志 settings.py文件配置方法
Aug 30 #Python
tensorflow如何批量读取图片
Aug 29 #Python
解决Django layui {{}}冲突的问题
Aug 29 #Python
Python Django实现layui风格+django分页功能的例子
Aug 29 #Python
You might like
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
js数组去重的hash方法
2016/12/22 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
Python中的pass语句使用方法讲解
2015/05/14 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
python实现域名系统(DNS)正向查询的方法
2016/04/19 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
python游戏地图最短路径求解
2019/01/16 Python
python如何读取bin文件并下发串口
2019/07/05 Python
django的model操作汇整详解
2019/07/26 Python
Python 如何展开嵌套的序列
2020/08/01 Python
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
你常见到的runtime exception
2016/09/05 面试题
介绍一下你对SOA的认识
2016/04/24 面试题
班组拓展活动方案
2014/08/14 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
2015年测量员工作总结
2015/05/23 职场文书
网吧温馨提示
2015/07/17 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python