PIL库的简单操作

灰度图和RGB图

灰度图是一个二维数组,每个值都表示这个像素点的灰度值(0到255之间的一个值),数组的维度(shape)则表示这个图片的长宽(单位像素px),先看个例子

from PIL import Image
import numpy as np

data = np.ones((16, 16), dtype=np.uint8)   # 创建一个全1的数组
data = data * 255                          # 数组所有元素乘以255
print(data)
data[4:12, 8] = 0                          # 将中间的一些值置为0
print(data)

img = Image.fromarray(data, 'L') # 将一个二维数组转换成灰度图
img.show()                       # 在屏幕显示图片

我们看一下显示的图片,会看到一个1。然后我们再去看data,你会发现也可以看到一个1。这是不是就很好理解了。

RGB图片是一个三维数组(长,宽,3),其实你完全可以把他看成一个和灰度图一样的二维数组,即维度为(长,宽)。这样每个元素的值就是一个一维数组,而这个一维数组是有三个元素组成的[R, G, B], 而将他转为灰度图也很简单,只需要将这个一维数组按照某种规则转换成一个0-255之间的值就行了,PIL中是这样转换的:L = R * 299/1000 + G * 587/1000+ B * 114/1000。

RGBA图片则是一个三维数组 (长,宽, 4),如果看成二维数组的话, 每个元素的是一个由四个元素组成的一维数组,即[R, G, B, A], A表示透明度。

PIL库

from PIL import Image
属性

  • Image.mode: 图片的格式,例如灰度‘L‘, 彩色‘RGB‘, ‘RGBA‘
  • Image.size: 图片的尺寸大小
  • Image.info: 图片的信息

方法

  • Image.open(path): 打开图片
  • Image.new(mode, size, color=0): 创建新图片,一般用不到
  • Image.fromarray(array, mode=None): 将numpy数组转换为图片,可以指定mode
  • Image.frombytes(mode, size, data, coder_name =‘raw‘, **args):从字节流中读取图片,coder_name为解码器
  • Image.convert(mode=None, matrix=None, dither=None, palette=0, colors=256): 将图片转换格式,例如由灰度转换为RGB convert(‘RGB‘)
  • Image.crop(box): 截取图片,box是一个(左,上,右,下)的元组,也就是相对于左上角(0,0)的像素值
  • Image.draft(mode, size):返回一个缩略图,格式为mode,大小为size。也就是说你可以将原来很大的图片缩小到你给定的size
  • Image.getbands(): RGB图返回(‘R‘, ‘G‘, ‘B‘), 灰度图返回(L, ),知道是干什么了的吧
  • Image.getbbox(): 举个例子,一个512x512的图片会返回(0, 0, 512, 512),分别是(左,上,右,下)
  • Image.copy(): 复制图片
  • Image.getextrema(): 返回最大和最小的值(0-255), 如果是灰度图,则返回所有值的最大和最小值(min, max), 如果是RGB图则返回((Rmin, Rmax), (Gmin, Gmax), (Bmin, Bmax))
  • Image.getpixel((x, y)): 返回给定位置的像素值, 灰度图为单值,RGB图为一维数组
  • Image.paste(im, box=None, mask=None): 将一张图片粘贴在该图片,box是粘贴的位置,可以是(0, 0)的元组,即(左,上)开始, 也可以是(左,上,右,下),不给定默认为(0, 0)。mask不知道什么意思
  • Image.putpixel((x, y), value): 在指定位置修改像素值
  • Image.resize(size, resample=None): 重新调整图片大小,resample不知道什么意思
  • Image.rotate(angle, resample=None, expand=None): 旋转图片,expand表示是否扩展图片以显示所有内容,默认不扩展,即旋转后的图片和原始图片大小一样
  • Image.save(fp, format=None): fp可以为文件名或文件对象,一般写文件名就行。format为保存的图片格式,默认根据文件名后缀选择
  • Image.show(): 在屏幕上显示该图片
  • Image.split():将图片分割,如果是RGB则分割成R,G,B三个图像
  • Image.thumbnail(size, resample=1): 同Image.draft
  • Image.transpose(): 旋转90度,同Image.rotate(90)
  • Image.verify(): 判断图片是否损坏
  • Image.close(): 关闭文件指针,一般不需要

还有一些高级方法就不说了,那些基本用不上,想知道的直接看官方文档吧。

最后,我正在学习一些机器学习的算法,对于一些我需要记录的内容我都会分享到博客和微信公众号(python成长路),欢迎关注。平时的话一般分享一些爬虫或者Python的内容。

原文地址:https://www.cnblogs.com/kanadeblisst/p/12144014.html

时间: 2024-08-02 06:27:43

PIL库的简单操作的相关文章

TortoiseSVN搭建本地版本库及简单操作使用

TortoiseSVN是windows上一款著名的版本控制软件,对于我们管理自己的代码,特别是对一个团队来说,非常重要. 本文探讨的是如何搭建本地的版本库. (1)安装TortoiseSVN之后需要创建本地的总版本库,即server,具体做法:新建一个文件夹,比如 D:\SVN\project 这个文件夹, 然后右键create repository here(在此创建版本库) (2)在另外的工作目录,比如 D:\workdocument 这个文件夹,进入文件夹,在空白处右键 SVN check

python 利用PIL库进行更改图片大小的操作

python 是可以利用PIL库进行更改图片大小的操作的,当然一般情况下是不需要的,但是在一些特殊的利用场合,是需要改变图片的灰度或是大小等的操作的,其实用python更改图片的大小还是蛮简单的,只需要几行代码,有一点可能刚入门的小伙伴们可能不知道PIL库,PIL是一个库的简写,他的真名叫做pillow,因此,需要pip install pillow 用anaconda的话是conda install pillow千万不要pip/conda install PIL咯,下面贴出代码,希望对一些小伙

python,使用PIL库对图片进行操作

在做识别验证码时,需要对验证码图片进行一些处理,所以就学习了一下PIL的知识,下面是我总结的一些常用方法. 注明:图片的操作都需要Image库,所以要使用import Image导入库 1.打开图片 import Imageimg=Image.open("code.jpg") 注:有些图片名称是包含中文的,就需要在""前加上u,例:img=Image.open(u"阿布.jpg") 以下各个操作均是基于原图进行的修改,原图为: 2.展示图片 im

python PIL库回顾

之前用PIL的时候都不知道看官方文档,网上搜索结果靠前的一些介绍性的博客其实很扯淡,讲两个函数.贴三张图,文章就完了. 今天把他的文档看了看,发现一点也不简单,网上介绍的不过是冰山一角. 对于我这样一个不太懂多媒体的人,如果用到图像处理,主要也就这些操作: 读写.取通道.两幅图合并.像素点操作.各种滤镜.色彩模式转换.图像旋转.缩放.裁剪.仿射. PIL对付这些小喽啰,都是完全没有问题的. 读写 open是Image类的一个方法,返回值是一个Image对象,值得注意的是,open不能打开网络图片

Python 之 使用 PIL 库做图像处理

Python 之 使用 PIL 库做图像处理 1. 简介. 图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴.PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前版本为 1.1.7,我们可以 在这里 下载学习和查找资料. Image 类是 PIL 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法. 2. 使用. 导入 Image

python PIL库回顾1

1 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HE

Python图像处理PIL库简介

搬运自本人博客:http://www.xgezhang.com/python_pil.html 最近用到一些简单的图像处理,这里简单介绍一下,Python Imaging Library (PIL)是PythonWare公司提供的免费的图像处理工具包,是python下的图像处理模块,支持多种格式,并提供强大的图形与图像处理功能.虽然在这个软件包上要实现类似MATLAB中的复杂的图像处理算法并不太适合,但是Python的快速开发能力以及面向对象等等诸多特点使得它非常适合用来进行原型开发.对于简单的

PIL库图像处理

Python Imaging Library,简称PIL, 是 Python语言 中常用的图像处理库,需要通过pip工具安装:pip install pillow.PIL库支持图像存储.显示和处理,能够处理几乎所有图片格式,可以完成对图像的缩放.剪裁.叠加以及向图像添加线条.图像和文字等操作. PIL包含21个与图片相关的类,这里只介绍Image类,Image类是PIL最重要的类,他代表一张图片,用以下方法引入: 要从文件加载图像,使用模块中的open()函数Image: >>> fro

python图像处理之PIL库

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