计算机视觉是人工智能的大门,其已成为人工智能应用方向的领头羊。故掌握数字图像处理的基础十分必要。本文主要介绍了导入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 |
结果如下: