当今世界充满了数据,图像构成了这些数据的重要组成部分。然而,在可以使用之前,这些数字图像必须经过处理——分析和操作,以提高其质量或提取一些可以利用的信息。
常见的图像处理任务包括:显示;基本操作,如裁剪、翻转、旋转等;图像分割、分类和特征提取;图像恢复;以及图像识别。Python 是这些类型的图像处理任务的绝佳选择,因为它作为一种科学编程语言越来越受欢迎,并且在其生态系统中免费提供了许多最先进的图像处理工具。
本文介绍了 10 个最常用的 Python 库,用于图像处理任务。这些库提供了一种简单直观的方式来转换图像并理解底层数据。
1. scikit-image
scikit-image 是一个开源 Python 包,可与 NumPy 数组一起使用。它实现了用于研究、教育和工业应用的算法和实用程序。即使对于那些刚接触 Python 生态系统的人来说,它也是一个相当简单明了的库。代码质量高,经过同行评审,并由活跃的志愿者社区编写。
资源
scikit-image 具有非常完善的 文档,其中包含大量示例和实际用例。
用法
该包作为 skimage 导入,大多数函数都位于子模块中。
图像滤波
import matplotlib.pyplot as plt
%matplotlib inline
from skimage import data,filters
image = data.coins() # ... or any other NumPy array!
edges = filters.sobel(image)
plt.imshow(edges, cmap='gray')

使用 match_template 函数进行模板匹配

您可以在 图库 中找到更多示例。
2. NumPy
NumPy 是 Python 编程中的核心库之一,并提供对数组的支持。图像本质上是一个标准的 NumPy 数组,其中包含数据点的像素。因此,通过使用基本的 NumPy 操作,例如切片、掩码和花式索引,您可以修改图像的像素值。可以使用 skimage 加载图像,并使用 Matplotlib 显示图像。
资源
NumPy 的 官方文档页面 上提供了完整的资源和文档列表。
用法
使用 Numpy 掩盖图像
import numpy as np
from skimage import data
import matplotlib.pyplot as plt
%matplotlib inline
image = data.camera()
type(image)
numpy.ndarray #Image is a NumPy array:
mask = image < 87
image[mask]=255
plt.imshow(image, cmap='gray')

3. SciPy
SciPy 是 Python 的另一个核心科学模块(如 NumPy),可用于基本的图像处理和处理任务。特别是,子模块 scipy.ndimage (在 SciPy v1.1.0 中) 提供了对 n 维 NumPy 数组进行操作的函数。该软件包目前包括用于线性和非线性滤波、二值形态学、B 样条插值和对象测量的函数。
资源
有关 scipy.ndimage 包提供的完整函数列表,请参阅 文档。
用法
使用 SciPy 通过 高斯滤波器 进行模糊处理
from scipy import misc,ndimage
face = misc.face()
blurred_face = ndimage.gaussian_filter(face, sigma=3)
very_blurred = ndimage.gaussian_filter(face, sigma=5)
#Results
plt.imshow(<image to be displayed>)

4. PIL/Pillow
PIL (Python Imaging Library) 是 Python 编程语言的免费库,增加了对打开、操作和保存许多不同图像文件格式的支持。然而,它的开发已经停滞不前,最后一次发布是在 2009 年。幸运的是,有 Pillow,它是 PIL 的一个积极开发的 fork,更容易安装,可以在所有主要操作系统上运行,并支持 Python 3。该库包含基本的图像处理功能,包括点运算、使用一组内置卷积核进行滤波以及色彩空间转换。
资源
文档 包含安装说明以及涵盖库每个模块的示例。
用法
在 Pillow 中使用 ImageFilter 增强图像
from PIL import Image,ImageFilter
#Read image
im = Image.open('image.jpg')
#Display image
im.show()
from PIL import ImageEnhance
enh = ImageEnhance.Contrast(im)
enh.enhance(1.8).show("30% more contrast")

5. OpenCV-Python
OpenCV (Open Source Computer Vision Library) 是计算机视觉应用中最广泛使用的库之一。OpenCV-Python 是 OpenCV 的 Python API。OpenCV-Python 不仅速度快,因为后台由 C/C++ 编写的代码组成,而且还易于编码和部署(由于前台的 Python 包装器)。这使其成为执行计算密集型计算机视觉程序的绝佳选择。
资源
OpenCV2-Python-Guide 使您可以轻松开始使用 OpenCV-Python。
用法
在 OpenCV-Python 中使用使用金字塔的图像混合 创建“Orapple”

6. SimpleCV
SimpleCV 是另一个用于构建计算机视觉应用的开源框架。它提供了对多个功能强大的计算机视觉库(如 OpenCV)的访问,但无需了解位深度、文件格式、色彩空间等。它的学习曲线明显小于 OpenCV,并且(正如其标语所说)“它使计算机视觉变得容易”。SimpleCV 的一些优点是
- 即使是初级程序员也可以编写简单的机器视觉测试
- 摄像头、视频文件、图像和视频流都是可互操作的
资源
官方 文档 非常易于遵循,并且包含大量示例和用例供参考。
用法

7. Mahotas
Mahotas 是另一个用于 Python 的计算机视觉和图像处理库。它包含传统的图像处理功能,如滤波和形态学运算,以及更现代的计算机视觉功能,用于特征计算,包括兴趣点检测和局部描述符。该接口使用 Python,这适合快速开发,但算法是用 C++ 实现并针对速度进行了调整。Mahotas 库速度快,代码简洁,甚至依赖性也最低。阅读其 官方论文 以获得更多见解。
资源
文档 包含安装说明、示例,甚至还有一些教程,可帮助您轻松开始使用 Mahotas。
用法
Mahotas 库依靠简单的代码来完成任务。例如,它在 寻找沃利 问题上做得很好,代码量最少。
解决寻找沃利问题


8. SimpleITK
ITK (Insight Segmentation and Registration Toolkit) 是一个“开源、跨平台系统,为开发人员提供了用于图像分析的广泛软件工具套件。SimpleITK 是构建在 ITK 之上的简化层,旨在促进其在快速原型设计、教育和 [解释] 语言中的使用。”它也是一个图像分析工具包,具有 大量组件,支持通用滤波操作、图像分割和配准。SimpleITK 使用 C++ 编写,但可用于包括 Python 在内的大量编程语言。
资源
有大量 Jupyter Notebooks 说明了 SimpleITK 在教育和研究活动中的应用。这些笔记本演示了使用 SimpleITK 通过 Python 和 R 编程语言进行交互式图像分析。
用法
使用 SimpleITK 和 Python 创建的刚性 CT/MR 配准过程的可视化

9. pgmagick
pgmagick 是 GraphicsMagick 库的基于 Python 的包装器。GraphicsMagick 图像处理系统有时被称为图像处理的瑞士军刀。其强大而高效的工具和库集合 支持读取、写入和操作 88 种以上的主要格式的图像,包括 DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM 和 TIFF。
资源
pgmagick 的 GitHub 存储库 包含安装说明和要求。还有一个详细的 用户指南。
用法
图像缩放

边缘提取

10. Pycairo
Pycairo 是 Cairo 图形库的一组 Python 绑定。Cairo 是一个用于绘制矢量图形的 2D 图形库。矢量图形很有趣,因为它们在调整大小或变换时不会失去清晰度。Pycairo 可以从 Python 调用 Cairo 命令。
资源
Pycairo GitHub 存储库 是一个很好的资源,其中包含有关安装和使用的详细说明。还有一个 入门指南,其中包含有关 Pycairo 的简短教程。
用法
使用 Pycairo 绘制线条、基本形状和径向渐变

结论
这些是 Python 中一些有用且免费提供的图像处理库。有些是众所周知的,有些对您来说可能是新的。尝试一下以更多地了解它们!
2 条评论