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实现对excel文件列表值进行统计的方法
Jul 25 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
pandas分别写入excel的不同sheet方法
Dec 11 Python
PyQt5实现简易计算器
May 30 Python
使用python实现简单五子棋游戏
Jun 18 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
解决Tensorflow sess.run导致的内存溢出问题
Feb 05 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 Python
Python开发.exe小工具的详细步骤
Jan 27 Python
Python WSGI 规范简介
Apr 11 Python
Python利用FlashText算法实现替换字符串
Mar 31 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
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
document.all与WEB标准
2020/05/13 Javascript
用htc组件制作windows选项卡
2007/01/13 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
js实现日历
2020/11/07 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
Python循环语句之break与continue的用法
2015/10/14 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
护士自我鉴定范文
2013/10/06 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
社区科普工作方案
2014/06/03 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书