图片处理(一):pillow模块常用操作

安装:

pip install Pillow

引入:

import PIL
from PIL import Image

简述

pillow库志愿者在PIL的基础上创建了一个分支版本,命名为Pillow。这个库专们用来处理图片,支持最新的python3版本。

坐标系统

PIL使用笛卡尔像素坐标系统,坐标(0,0)位于左上角,从上往下为正方向,从左到右为正方向。

坐标经常用于二元组(x,y)。长方形则表示为四元组,前面是左上角坐标。例如,一个覆盖800x600的像素图像的长方形表示为(0,0,800,600)。

颜色空间模型

常用到的有’1’、‘L’、‘RGB’。

11位像素,表示黑和白,但是存储的时候每个像素存储为8bit。
L:8位像素,表示黑和白。
P:8位像素,使用调色板映射到其他模式。
RGB:3x8位像素,为真彩色。
RGBA:4x8位像素,有透明通道的真彩色。
CMYK:4x8位像素,颜色分离。
YCbCr:3x8位像素,彩色视频格式。
I:32位整型像素。
F:32位浮点型像素。
PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。

常用方法

新建图片

from PIL import Image
img = Image.new(mode,size,color)

加载图片

from PIL import Image
img = Image.open('filepath')  # 文件地址

# 读入二进制图片
import numpy as np
# 读取二进制数据
f = open("input.raw", 'rb')
image_bytes = fd.read()
f.close()
# 转为数组
nparr = np.asarray(bytearray(image_bytes), dtype="uint8")
image = nparr.reshape((960, 540)) # (height, width)
# 读取图片
img = Image.fromarray(binary)

保存图片

img.save('filename')

裁剪(复制)图片

croped_img = img.crop((100,100,200,200))  # 坐标的四个角

粘贴图片

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

缩放尺寸

这样是直接拉伸的结果,不是进行裁剪哦

img = img.resize((24,24))
在这里插入代码片

旋转图片

img = img.rotate(angle)  # 逆时针旋转angle度,加上expand=true表示将图片的边角保留

翻转图片


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

展示图片

img.show()

提高图片亮度

from PIL import Image
img = Image.open("jing.jpg")
def deffun(c):
    return c*0.89      #改变了亮度
img_eval = Image.eval(img,deffun)  
img_eval.save("gai.jpg")

改变模式

from PLI import Image
im = Image.open('hopper.ppm').convert('L')

其他操作

其他关于图片通道等等的操作我应该会在opencv中介绍。
下面是我看到的一篇介绍的比较详细的博客,大家有兴趣可以学习一下。
https://blog.csdn.net/swinfans/article/details/101989157

常用属性

  • filename:返回文件名
  • format:返回文件格式,如png,如果是由PIL创建的图像,则其文件格式为None。
  • mode:返回颜色空间模型,该属性典型的取值为“1”,“L”,“RGB”或“CMYK”。
  • size:返回图片尺寸
  • width:返回图片宽度
  • height:返回图片高度
  • info:返回图片一些信息,以字典形式

使用pillow在图片上加文字

在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦。OpenCV中并没有使用自定义字体文件的函数,这不仅意味着我们不能使用自己的字体,而且意味着他无法显示中文字符。这还是非常要命的事情。而且他显示出来的文字位置也不太好控制。但是使用pillow就很方便,它还可以指定字体。

from PIL import ImageFont, ImageDraw, Image

img = Image.open("image.jpg")

#设置需要显示的字体
fontpath = "font/simsun.ttc"
font = ImageFont.truetype(fontpath, 32)

# 创建draw对象,使用它来写字
draw = ImageDraw.Draw(img)

#绘制文字信息
draw.text((100, 300),  "Hello World", font = font, fill = (255, 255, 255))
draw.text((100, 350),  "你好", font = font, fill = (255, 255, 255))
bk_img = np.array(img_pil)

img.show()
img.save('new.png')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笼中小夜莺

嘿嘿嘿,请用金钱尽情地蹂躏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值