PIL:Python Imaging Libaray PIL库是python图像处理库
但是PIL仅仅支持到Python2.7,一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x
安装Pillow库:pip install pillow
但是导入包的时候还是:导入PIL这个库中的Image模块
- import PIL
- from PIL import Image
1.打开图片:Image.open()
- from PIL import Image
-
- image=Image.open(r"D:\4.jpg")
2.展示图片
- from PIL import Image
-
- image=Image.open(r"D:\4.jpg")
-
- image.show()
3.保存图片:
- from PIL import Image
-
- image=Image.open(r"D:\4.jpg")
- image.save("D:\linzhiling.jpg")
4.输出图片的size和mode
(1)Rgb图像
- from PIL import Image
-
- image1=Image.open(r"D:\4.jpg")
-
- print(image1.size)#(1680, 1050)
- print(image1.mode)#RGB
(2)灰度图像
- image2=Image.open(r"D:\2.jpg")
-
- print(image2.size)#(457, 783)
- print(image2.mode)#L
mode表示图片的模式,RGB表示彩色图像,L代表灰度图
size 属性为图片的大小(宽度,长度),无论是彩色图还是灰度图都是返回(xxx,xxx),也就是说不会返回通道数
5.rgb图和灰度图互相转化
(1)rgb图转化成灰度图
- image1=Image.open(r"D:\4.jpg")
-
- print(image1.size)#(1680, 1050)
- print(image1.mode)#RGB
-
- image2=image1.convert("L")
- image2.show()

(2)灰度图转彩色图
- image2=Image.open(r"D:\2.jpg")
-
- print(image2.size)#(457, 783)
- print(image2.mode)#L
-
- image3=image2.convert("RGB")
- print(image3.size)#(457, 783)
- print(image3.mode)#RGB
- image3.show()
和cv2库的灰度图一样,虽然转成了三通道的图,但是看起来还是和灰度图一摸一样

6.图片缩放resize
- image1=Image.open(r"D:\4.jpg")
-
- print(image1.size)#(1680, 1050)
- print(image1.mode)#RGB
-
- image2=image1.resize((256,256))
- image2.show()
7.图片旋转:
- im = image.rotate(45) # 逆时针旋转 45 度
- im = image.transpose(Image.FLIP_LEFT_RIGHT) # 左右翻转
- im = im.transpose(Image.FLIP_TOP_BOTTOM)# 上下翻转
8.对每个像素值进行操作
- image1=Image.open(r"D:\4.jpg")
-
- print(image1.size)#(1680, 1050)
- print(image1.mode)#RGB
-
- image2=image1.point(lambda i:i*5)#所有像素点都乘以5
- image2.show()
原图:

代码运行后:

比较常见的应用是将一张0/1二值图变成0/255二值图:
比如这样一张图:
运行下面代码后:
- image2=Image.open(r"D:\Test.png")
-
- print(image2.size)#(457, 783)
- print(image2.mode)#L
-
- image3=image2.point(lambda i:i*255)
- image3.show()
得到:

其他两种实现将一张0/1二值图变成0/255二值图的方法参见本人另一篇博客:一张单通道的二值图(0,1二值图)转化为单通道二值图(0,255)二值图_Pr Young的博客-CSDN博客
9. 图片和Numpy数组之间相互转化:
(1)图片转数组
- image2=Image.open(r"D:\4.jpg")
-
- print(image2.size)#(1680,1050)
- print(image2.mode)#RGB
-
- array = np.array(image2)
- print(array.shape) #(1050, 1690, 3)
(2)数组转图片
- image2=Image.open(r"D:\4.jpg")
-
- print(image2.size)#(1680,1050)
- print(image2.mode)#RGB
-
- array = np.array(image2)
- print(array.shape) #(1050, 1690, 3)
-
- out = Image.fromarray(array)
- out.show()