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')
这里顺带提一下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)
box=(1000,300,1600,900)
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)
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()
|