计算机视觉是人工智能的大门,其已成为人工智能应用方向的领头羊。故掌握数字图像处理的基础十分必要。本文主要介绍了导入Pillow库中的Image对图像进行简单处理的方法。
图像的打开与保存
导入模块:
from PIL import Image
打开图像:
Image.open()
#返回图像对象保存图像:
Image.save(文件路径)
#改变文件名后缀,就可以转换图像格式图像对象的主要属性:
属性 说明 图像对象.format 图像格式 图像对象.size 图像尺寸 图像对象.mode 色彩模式 1
2
3
4
5
6
7
8
9
10
11
12
13
14import matplotlib.pyplot as plt
from PIL import Image
#打开图像
img=Image.open("lena.tiff")
#保存图像
img.save("test.tiff")
img.save("lena.jpg")
img.save("lena.bmp")
#查看图像对象的主要属性
img1=Image.open("lena.jpg")
img2=Image.open("lena.bmp")
print("The format:",img2.format)
print("The size:",img2.size)
print("The mode:",img2.mode)结果如下:
显示图像
plt.imshow(image对象/Numpy数组)
#对图像进行处理并显示其格式plt.show()
#将处理后的图像显示1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#显示图像
#设置画布尺寸
plt.figure(figsize=(15,5))
#设置子图
plt.subplot(131)
#plt.axis("off")#关闭坐标轴
plt.imshow(img)
plt.title(img.format)
plt.subplot(132)
#plt.axis("off")
plt.imshow(img1)
plt.title(img1.format)
plt.subplot(133)
#plt.axis("off")
plt.imshow(img2)
plt.title(img2.format)
#将处理后的图像显示
plt.show()结果如下:
转换图像的色彩模式
图像对象.convert(色彩模式)
取值 色彩模式 1 二值图像(仍是8位数据,0x00与0xFF) L 灰度图像 P 8位彩色图像 RGB 24位彩色图像 RGBA 32位彩色图像 CMYK CMYK彩色图像 YCbCr YCbCr彩色图像 I 32位整数灰度图像 F 32位浮点灰度图像 1
2
3
4#转换图像的色彩模式
img_convert=img.convert("L")
print("The convert mode:",img_convert.mode)#img_convert是一个新的图像对象
img_convert.save("img_Gray.bmp")结果如下:
颜色通道的分离与合并
分离:
图像对象.split()
合并:
Image.merge(色彩模式,图像列表)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30#颜色通道的分离与合并
#1.分离
img_r,img_g,img_b=img.split()
#显示分离后的效果
plt.figure(figsize=(10,10))
plt.subplot(221)
plt.axis("off")
plt.imshow(img_r,cmap="gray")
plt.title("R",fontsize=20)
plt.subplot(222)
plt.axis("off")
plt.imshow(img_g,cmap="gray")
plt.title("G",fontsize=20)
plt.subplot(223)
plt.axis("off")
plt.imshow(img_b,cmap="gray")
plt.title("B",fontsize=20)
#2.合并
img_rgb=Image.merge("RGB",[img_r,img_g,img_b])
plt.subplot(224)
plt.axis("off")
plt.imshow(img_rgb)
plt.title("RGB",fontsize=20)
#显示处理后的图像
plt.show()结果如下:
将图像数据转化为数组
np.array(图像对象)
1
2
3
4#将图像数据转化为数组
import numpy as np
img_array=np.array(img)
print("The shape:",img_array.shape)结果如下:
图像的缩放、旋转和裁剪
缩放:
图像对象.resize((width,height))
图像对象.thumbnail((width,height))
#其返回值是None,也就是直接对图像对象进行了缩放
旋转、镜像:
图像对象.transpose(旋转方式)
旋转方式:
操作 对应旋转方式 Image.Transpose.FLIP_LEFT_RIGHT 水平翻转 Image.Transpose.FLIP_TOP_BOTTOM 上下翻转 Image.Transpose.ROTATE_90 逆时针旋转90 Image.Transpose.ROTATE_180 逆时针旋转180 Image.Transpose.ROTATE_270 逆时针旋转270 Image.Transpose.TRANSPOSE 将图像进行转置 Image.Transpose.TRANSVERSE 将图像进行转置,再水平翻转
裁剪:在图像上指定的位置裁剪出一个矩形区域
图像对象.crop((x0,y0,x1,y1))
- x0,x0对应左上角坐标;x1,y1对应右下角坐标
1 | #对图像进行缩放和旋转和裁剪 |
结果如下:
实例分析:手写数字数据集MNIST
1 | import tensorflow as tf |
结果如下: