PIL库之Image基础操作快速上手

PIL库基本操作快速入门

PIL(pillow)——python的图像处理库

1.如何读入一张图片?

PIL(python Imaging Library,python图像处理库)提供了图像处理功能,包括图像的缩放、采集、选择、读入、写入等,其中最重要的模块为Image。

接下来我们了解一下,PIL是如何通过Image模块读入图片的:

from PIL import Image
import matplotlib.pyplot as plt
img=Image.open('../img/leshan.jpg')
print(type(img))
<class 'PIL.JpegImagePlugin.JpegImageFile'>

可以看到通过Image的open函数可以将图片读入成一个PIL的对象,类似于numpy中的array。

那进一步,我们都知道灰度图片是比较简单好处理的,如果需要转换成灰度图,可以使用这个对象的convert方法。

img=img.convert('L')
# 一般来说我们常用的mode有RGB、L这两种

这里顺带提一下3通道的RGB图是如何通过convert转换成一通道的灰度图的,同官方函数文档的公式:

When translating a color image to greyscale (mode “L”),
the library uses the ITU-R 601-2 luma transform::

        L = R * 299/1000 + G * 587/1000 + B * 114/1000

意思就是说当将彩色图转换成灰度图的时候会使用这个ITU-R 601-2转换:将三个通道像素值矩阵分别进行对应的数值伸缩变化然后叠加在一起。

2.如何保存一张图片?

值得一提的是Image的save函数不仅仅可以用于保存PIL对象为一定格式图片,并且会自动识别存储名来使用对应的图片存储格式。

如果对应的PIL对象保存时不满足对应格式,则会提示相应错误。

# 将我们的灰度图保存起来
img.save('../img/leshan_grey.jpg')
img.close()

额。。。咱们乐山大佛周围景色的这张图片貌似本身就比较灰。。。换一张图片吧!

img2=Image.open('../img/crisis2.jpg').convert('L')
img2.save("../img/crisis2_grey.jpg")
plt.imshow(img2)
img2.close()

在这里插入图片描述

当然你不想用Image自带的show功能也可以使用pyplot的imshow(兼容PIL对象)

3.生成缩略图

所谓的缩略图,其实就是将图片进行了内容上的缩小、压缩便于存储,内容与原图没有区别。

img3=Image.open('../img/crisis2.jpg')
img3.thumbnail((128,128))   # 输入指定像素值
# 图像进行了压缩
plt.imshow(img3)
img3.close()

在这里插入图片描述

4.复制和粘贴图像区域

这个功能就有一点PS的感觉了,那么既然要复制一个区域,那么我就得先确定一个边界框(bounding box)——有点像目标检测哈。

我们就用这个box去框出纳米装甲的面甲。

img3=Image.open('../img/crisis2.jpg')
plt.imshow(img3)
# 大概是x[1000(左):1600(右)],y[300(上):900(下)]
box=(1000,300,1600,900)
# Tips:box规矩是以图片左上角为(0,0),box=(左,上,右,下)的操作
area=img3.crop(box)
plt.subplot(1,2,1)
plt.imshow(area)
plt.subplot(1,2,2)
plt.imshow(img3)
<matplotlib.image.AxesImage at 0x272ddd4efd0>

在这里插入图片描述

可以看到复制并不是剪切哦,没有让咱们的孤岛危机2主角“分头行动”哦。但是我们可以让它的头来一个180度选择,也就是图像的翻转,需要用到rotate这个关键词。

area=area.transpose(Image.ROTATE_180)
# transpose有点torchvision里面的compose的感觉,把一个操作函数作为参数输入
img3.paste(area,box)
plt.imshow(img3)
<matplotlib.image.AxesImage at 0x272dddd1a00>

在这里插入图片描述

额,只能说想笑但是笑不出来。。。。=-=只希望后面他不要开着隐身来刀我(滑稽.jpg)

5.尺寸(分辨率)调整和旋转

好了,既然刚刚以及提到了图片旋转和伸缩,那我们就直接来。

img3=img3.resize((128,128))
plt.subplot(1,2,1)
plt.imshow(img3)
img3=img3.rotate(90)    # 输入单位为度
plt.subplot(1,2,2)
plt.imshow(img3)
img3.close()

在这里插入图片描述

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值