PIL是一个图像处理经常使用到的库,全名是Python Image Library,其中有一个子库是Image,我们今天就来用一下这个库
PIL可以做很多和图像处理相关的事情:
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 12 14:03:00 2019
@author: Administrator
"""
from PIL import Image
from pylab import *
img1 = Image.open('E:\\360MoveData\\Users\\Administrator\\Desktop\\things2_0\\flower.jpg')
subplot(121)
axis('off')
imshow(img1)
img2 = Image.open('E:\\360MoveData\\Users\\Administrator\\Desktop\\things2_0\\flower.jpg').convert('1')
subplot(122)
axis('off')
imshow(img2)
show()
效果:
这里面的Image.open函数就是我们读取图片的函数,看起来和前面博客提到的cv库中的imread函数作用还是很相似的,subplot的作用在于我们将这个读取出来的图片作为最后输出的一个子图的形式,axis()顾名思义是针对显示图片的坐标轴的方法,如果这里不设置成off的话,就会变成这种效果:
可以看到我们在读取第二个子图的时候使用了convert()函数,这个函数的作用是什么呢,是指明了我们对于图像处理的模式,比如我这里指定了模式为“1”,根据我们运行的效果也可以看出来,在这个模式下的图片只有黑白两种颜色,不过这样说显得有点不专业嘿,用老师在课上的话讲,把这种叫做通道,如果我们传统的RGB,是由三种基本颜色组成的,这种就是有三个颜色通道,那么我们这个模式1的图片处理,可以看到非黑即白,即便如此,它的每个像素也是用八位来表示,0表示黑,255表示白,经过convert函数处理之后读取出来的图片,就如同我们刚才看到的右侧子图,变成了黑白的颜色。
另外一种模式是L,在这种模式下会出现什么效果呢?让我们试一下
嘿,明显看到这个图片处理得比刚才的模式细腻多了呀,而且也不只有黑白两种颜色,而是一种灰灰的颜色,与模式1相似,模式L的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是这样转换的:
L = R * 299/1000 + G * 587/1000+ B * 114/1000
在https://www.jianshu.com/p/bdd9bfcbedb7这篇博客中看到了有关convert函数几种模式的介绍,如下:
convert()
是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式1 ------------------(1位像素,黑白,每字节一个像素存储)
L ------------------(8位像素,黑白)
P ------------------(8位像素,使用调色板映射到任何其他模式)
RGB------------------(3x8位像素,真彩色)
RGBA------------------(4x8位像素,带透明度掩模的真彩色)
CMYK--------------------(4x8位像素,分色)
YCbCr--------------------(3x8位像素,彩色视频格式)
I-----------------------(32位有符号整数像素)
F------------------------(32位浮点像素)
所以接下来依次验证几种模式,左面的都是原图,右面的代表不同的模式效果
模式P:
模式RGBA:
模式YCbCr:
模式I:
模式F:
针对PIL库中的几个函数的实验大概就是这样,在这个过程中参考了一些大佬的博客,我自己也是刚刚开始这方面的学习,后面会慢慢更新学习过程中的感受和新知识