0 前言
图像的读取和处理是计算机视觉领域中的一个基本任务,在Python中,有几个流行的库可以用来读取和处理图像数据
0.1 Matplotlib介绍
Matplotlib是Python中一个非常流行的绘图库,它通常用于数据可视化,虽然它不是专门的图像处理库,但它提供了基本的图像读取和显示功能,其特点如下:
- 数据科学三剑客之一:Matplotlib常与Pandas和NumPy一起使用,是数据科学领域的重要工具
- 数据可视化:它主要用于创建高质量的图表和图形,但也可以用来显示图像
- 高仿Matlab:它的许多功能和界面与Matlab相似,对于熟悉Matlab的用户来说很容易上手
- 图像处理功能有限:Matplotlib没有内置的图像处理功能,因此,如果需要进行复杂的图像操作,则需要结合其他库,如NumPy或SciPy
- 基本图像操作:它提供了
plt.imread()
来读取图像,plt.imshow()
来显示图像,以及plt.imsave()
来保存图像
0.2 PIL介绍
PIL(Python Imaging Library)是Python的一个图像处理库,它提供了广泛的图像文件格式支持和强大的图像处理能力,其特点如下:
- Python内置库:PIL是Python的一个标准库(安装后即可使用)
- PyTorch无缝衔接:PIL与PyTorch有很好的兼容性,可以方便地用于深度学习项目中的图像预处理
- 广泛的图像处理功能:提供了图像的打开、操作、保存等多种功能
0.3 OpenCV介绍
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像处理和计算机视觉功能,其特点如下:
- 平面图像处理的金标准:OpenCV是图像处理和计算机视觉领域中使用最广泛的库之一
- C++编写:它最初是用C++编写的(效率高),但提供了Python等其他语言的接口
- Python调用:通过安装
opencv-python
包,即可在Python中方便地使用OpenCV的功能 - 功能强大:提供了从基本的图像操作到复杂的图像分析和机器学习算法的广泛功能
0.4 选择条件
-
如果需要进行复杂的图像处理或计算机视觉任务,则OpenCV是最佳选择
-
如果需求主要是数据可视化,则Matplotlib可能更适合
-
如果需要和深度学习框架配合使用,则PIL可能更适合
1 Matplotlib的图像操作实践
# 引入matplotlib的pyplot函数,为图像处理做准备
from matplotlib import pyplot as plt
# 如果是用pycharm等后端工具绘图,需要指定图形用户界面工具包
# import matplotlib
# matplotlib.use('TkAgg') # 设置绘图后端为 TkAgg
# 1、图像的读取
# 1.1 读取图像
# 随便找一张图片(比如我在网上找了一张哆啦A梦的jpg图,命名为dlam.jpg,然后即可使用imread方法进行读取)
img = plt.imread(fname="dlam.jpg")
# 1.2 查看形状
# 输出为[H, W, C]格式
print(img.shape)
# 1.3 图像显示
plt.imshow(X=img)
# 2、图像的色彩处理
# 处理1:读取图像的 R 层,C=3,代表有3个颜色通道,也就是RGB三层颜色(要读取R层,就取值C=0;G层则为C=1;B层则为C=2)
img_r = img[:, :, 0]
plt.imshow(X=img_r)
# 处理2:改变图像颜色(获取R层后,用cmap="gray"将其置为灰色)
plt.imshow(X=img_r, cmap="gray")
# 3、图像的截取显示
# 处理1:截取图像的上半部分
H, W, C = img.shape
plt.imshow(X=img[:H//2, :, :])
# 处理2:截取图像的右半部分
plt.imshow(X=img[:, W//2:, :])
# 处理3:截取图像的左下角
plt.imshow(X=img[H//2:, :W//2, :])
# 处理4:亚采样(将图片H和W都每隔4行取第一行数据,且颜色不变),相当于减少图片大小并压缩画质
plt.imshow(X=img[::4, ::4, :])
# 4、图像的保存
# 压缩图片后保存为名为“dlam_small.jpg"”的图片文件
plt.imsave(fname="dlam_small.jpg", arr=img[::2, ::2, :])
2 PIL的图像操作实践
# 引入PIL的Image模块,为图像处理做准备
from PIL import Image
# 引入numpy,提供一些科学计算的方法
import numpy as np
# 1、图像的读取
# 1.1 读取图像
# 随便找一张图片(比如我在网上找了一张哆啦A梦的jpg图,命名为dlam.jpg,然后即可使用imread方法进行读取)
img = Image.open(fp="dlam.jpg")
# 1.2 查看形状
# 输出为[W, H]格式
print(img.size)
# 1.3 显示图像
img.show()
# 2、图像的色彩处理
# 处理1:查看图片中某个像素点的RGB
print(img.getpixel(xy=(100, 100)))
# 处理2:改变图片颜色为灰色
# 用convert方法中的mode参数来控制,mode参数常用值如下:
# "1":二值图像,只有黑白两种颜色,每个像素用1位表示&#