学习总结自:PIL官方文档

PIL(Python Image Library)是Python的一个图像处理库。

1、简介

PIL库中最重要的类是Image

①从文件中加载Image——open方法

from PIL import Image
im=Image.open('文件路径')

成功后,该函数返回Image对象。

你可以通过一系列Image属性检查该文件的内容:

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

如果文件没打开,则会抛出OSError异常。

所以,安全的文件打开方式为:

try:
with Image.open('Test.jpg') as im:
im.show()
except OSError:
pass

②显示Image对象

当我们有了一个Image对象,就可以对其进行一系列的操作和处理,例如,我们通过show方法打开

im.show()

2、一些常用操作

1)读写图像

①从图像文件读取

见第一部分。

PIL支持很多Image文件格式。如果想读取Image文件,就用Image.open()方法。我们不需要关注图像类型,只需要调用该方法就可以,它会自动识别图像文件格式。

如果想将Image对象保存为图像文件,就用Image.save()方法。保存文件时,路径名就变得很重要了。除非已经指定格式(通过第二个参数指定),否则该库会用路径中的扩展名作为存储格式。

②从之前打开的文件中读取

也可以从一个类文件(file-like)对象中打开一幅图像,该对象必须实现了file.read、file.seek、file.tell方法,并以二进制的模式打开了:

from PIL import Image
with open('Test.jpg','rb') as fp:#此时的fp就是file-like对象
im=Image.open(fp)

③从二进制数据中读取

from PIL import Image
import io
im=Image.open(io.BytesIO(buffer))

2)将一个图片文件转化为JPEG格式

读取任意类型的图像文件,并将之保存为JPEG类型

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)

3)创建JPEG缩略图

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)

4)识别某文件夹中图片文件,打印它们的信息

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

5)裁剪、粘贴、融合

①从Image中裁剪一小块区域:crop

box=(100,100,400,400)
region=im.crop(box)#提取box所在矩形区域的图像

②处理该小块图像,并粘贴回原图:paste

将该小块图像翻转180°,并粘贴回去

region=region.transpose(Image.ROTATE_180)
im.paste(region,box)

粘贴时,region必须和box的尺寸一致。

6)波段分割与融合:split、merge

r,g,b=im.split()
im=Image.merge('RGB',(b,g,r))

7)几何变换:resize、rotate、transpose

resize:尺寸变形

rotate:顺时针旋转,参数是角度;旋转整幅图像,但是保留原始框架

transpose:旋转,可以将整个框架给旋转了

x,y=im.size
#长宽缩小两倍
new_size=(x/2,y/2)
new_im=im.resize(new_size) #旋转
new_im=im.rotate(45)
new_im=im.transpose(Image.ROTATE_90)

8)颜色变换:convert

Python允许用convert()方法将Image实现色彩模式转化,'L'模式是灰度图像

im=im.convert('L')

9)图像增强

①滤波:Filter

使用模块ImageFilter中的Filter()方法和一些预定义的增强滤波器

im=im.filter(ImageFilter.DETAIIL)

②像素操作:point

point()可以实现对每个像素点的像素值实行修改;

该方法接收一个函数,对每个像素值都用该方法进行处理;

比如下文代码,就是将每个像素值提高为原来的1.2倍:

im=im.point(lambda i: i *1.2)

如果我们同时采用point()与paste()方法,就能实现对图像的选择性修改。

③波段处理:split+point+merge

im_R,im_G,im_B=im.split()
#筛选出R<100的区域,作为蒙版
mask=im_R.point(lambda i:i<100 and 255)
#处理G波段的所有像素值
out=im_G.point(lambda i:i*0.7) #把处理好的G波段用之前的mask进行蒙版处理
#相当于保留r<100部分的G,除去r>100部分的G
im_G.paste(out,None,mask) #波段重建
im=Image.merge(im.mode,(im_R,im_G,im_B))

④一段用于创建mask的语句

imout=im.point(lambda i: expression and 255)
#制作一个符合expression的mask

ImageEnhance模块中有很多图像增强类与方法

⑤对比度:ImageEnhance.Contrast

from PIL import ImageEnhance

enh=ImageEnhance.Contrast(im)
enh.enhance(1.3).show('30% more contrast')

⑥动画

当我们打开一个动画图片(典型的如GIF)后,PIL自动加载第一帧,我们可以用seek和tell方法在不同帧间移动:

from PIL import Image
with Image.open('Test.gif') as im:
im.seek(1)#跳到第一帧 #对第一帧的修改
#....
try:
while(1):
im.seek(im.tell()+1)
#对每一帧的修改
except EOFError:
pass #结束时

当动画访问到最后一帧之后,再用seek,就会抛出EOFError

逐帧处理:ImageSequence.Iterator

from PIL import ImageSequence
for frame in ImageSequence.Iterator(im):
#逐帧处理语句

Python:PIL(一)——简介的更多相关文章

  1. Python生态环境简介[转]

    Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy  原译: Python生态环境简介 当 ...

  2. Python PIL

    Python PIL PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. ...

  3. (转)python生态环境简介

    Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy  原译: Python生态环境简介 当 ...

  4. Python PIL 库的应用

    PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. PIL库主要有2个方 ...

  5. 基于Python PIL实现简单图片格式转化器

    基于Python PIL实现简单图片格式转化器 目录 基于Python PIL实现简单图片格式转化器 1.简介 2.前期资料准备 2.1.1如何实现图片格式转换? 2.1.2如何保存需要大小的图片? ...

  6. Python,PIL压缩裁剪图片

    自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...

  7. python PIL 图像处理操作

    python PIL 图像处理 # 导入Image库 import Image # 读取图片 im = Image.open("1234.jpg") # 显示图片 im.show( ...

  8. Python PIL模块笔记

    利用python pil 实现给图片上添加文字 图片中添加文字#-*- coding: utf-8 -*- from PIL import Image,ImageDraw,ImageFont ttfo ...

  9. Python 3 mysql 简介安装

    Python 3 mysql 简介安装 一.数据库是什么 1.  什么是数据库(DataBase,简称DB) 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据 ...

  10. python PIL 图像处理

    python PIL 图像处理 This blog is from: https://www.jianshu.com/p/e8d058767dfa Image读出来的是PIL的类型,而skimage. ...

随机推荐

  1. 关于笨蛋式病毒创作(CMD式)C++

    ​ 对于病毒创作,有好多种原因:有想装逼的,想盗取信息的...... 任何理由千奇百出,有的在下面评论出来. 对于病毒创作,我可是既会有不会,只会乱写,回头一看,全错了. 我今天写的这篇博客就是面向于 ...

  2. Codeforces Round #739 (Div. 3)

    A. Dislike of Threes 简单的水题,预处理即可 AC_CODE #include <bits/stdc++.h> using namespace std; templat ...

  3. PyTorch 1.4 中文文档校对活动正式启动 | ApacheCN

    一如既往,PyTorch 1.4 中文文档校对活动启动了! 认领须知 请您勇敢地去翻译和改进翻译.虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错--在大部分情况下,我们的 ...

  4. C 数组排序后输出至文件

    如题 C实现 #include<stdio.h> #define COUNT 9 //数组长度+1 #define FILE_NAME "data.txt" //文件名 ...

  5. UNIX系统上的抓包工具tcpdump常用命令说明

    tcpdump 介绍 tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才 ...

  6. js获取 url?后面的参数取值

    function GetRequest() {     var url = location.search; //获取url中"?"符后的字串     var theRequest ...

  7. Linux-一次执行多个命令 ; && ||

    一次执行多个命令,多个命令之间用:号隔开 cmd1;cmd2:cmd3 这样前后执行的时候没有依赖性,如果有下列要求呢 1. cmd1执行失败那就不要执行后面的命令 2. cmd1失败了才去指令后面的 ...

  8. rtsp监控直播转码用到EasyNVR

    第一 下载EasyNVR_win_v2.6.18.0320 第二 安装启动 第三 配置转码路径 http://localhost:10800/ 最后转码播放 /hls/stream_1/stream_ ...

  9. MSTP多生成树协议

    MSTP多生成树协议 目录 MSTP多生成树协议 1.MSTP(Multiple Spanning Tree Protocol)概述 2.STP.RSTP.PVST的应用缺陷 3.MSTP的主要特点 ...

  10. 编译安装haproxy

    一.安装lua环境 1.1 安装依赖包 [root@centos7 ~]# yum install gcc readline-devel 1.2 下线lua源码包并解压 [root@centos7 ~ ...