介绍
如今的世界存在了大量的数据,图像数据是重要的组成部分。如果要利用这些图片,需要对图像进行处理,提高图片质量或提取图片内容信息。
图像处理的常见操作包括图像显示,基本操作如裁剪,翻转,旋转等,图像分割,分类和特征提取,图像恢复和图像识别。Python是图像处理的合适选择,因为它作为一种科学编程语言日益普及,并且提供了许多免费实用的图像处理工具。
下面将介绍10个用于图像处理的python库,它们在处理图像等方面都提供了简单方便的方法。
1. scikit Image
scikit-image(https://scikit-image.org/)是一个与numpy一起使用的开源Python工具。它实现了用于研究,教育和行业应用的算法和实用程序。即使是刚接触Python的人也可以轻松使用。它的代码由活跃的志愿者编写,由高质量的同行进行评审。
资源
有完善的文档和丰富的示例(http://scikit-image.org/docs/stable/user_guide.html)。
示例
导入skimage,大多数函数都在它的子模块中。下面是一些 skimage 的例子:
图像过滤
import matplotlib.pyplot as plt
%matplotlib inline
from skimage import data,filters
image = data.coins()
# ... 或者其他的 Numpy 数组
edges = filters.sobel(image)
plt.imshow(edges, cmap='gray')
使用match_template函数进行模板匹配
在gallery中有更多例子。
2. Numpy
Numpy是Python的核心库之一,它为数组提供了支持。一个图像本质上是包含像素数据的标准Numpy数组。因此,通过使用基本的Numpy操作,例如切片,掩膜(mask)和花式索引(fancy indexi)等直接修改图像的像素值。可以使用skimage加载图像并用matplotlib显示。
资源
Numpy的官方文档提供了完整的文档和资源列表(http://www.numpy.org/)。
示例
使用Numpy对图像进行掩膜操作。
import numpy as np
from skimage import data
import matplotlib.pyplot as plt
%matplotlib inline
image = data.camera()
type(image)
numpy.ndarray #图像是一个numpy数组
mask = image < 87
image[mask]=255
plt.imshow(image, cmap='gray')
3. Scipy
scipy是一个类似Numpy的核心科学计算模块,可用于基本的图像处理任务。特别是子模块scipy.ndimage提供了操作n维Numpy数组的函数。该软件包目前包括线性、非线性滤波,二值形态(binary morphology),B样条插值(B-spline interpolatio)和对象测量(object measurements)等功能。
资源
scipy.ndimage的完整函数列表:https://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html#correlation-and-convolution
示例
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年。幸运的是,PIL有一个活跃的分支Pillow,它更易于安装,支持所有主要的操作系统并支持Python 3。该库包含了基本的图像处理功能,包括像素操作,使用内置卷积内核进行过滤以及颜色空间转换。
资源
该文档包含了安装指引以及每个模块的示例。
示例
使用Pillow中的ImageFilter增强图像:
from PIL import Image, ImageFilter
#读入图像
im = Image.open( 'image.jpg' )
#显示图像
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库具有尽量少的代码甚至最小的依赖。阅读他们的{官方文章](https://openresearchsoftware.metajnl.com/articles/10.5334/jors.ac/)获取更多信息。
资源
该文档包含了安装说明,示例和教程,帮助你轻松地使用mahotas。
示例
Mahotas尽量使用简单的代码实现功能。例如“Finding Wally”问题,Mahotas使用最少的代码实现了较好的结果。这里是它的源代码。
8. SimpleITK
ITK(Insight Segmentation and Registration Toolkit)是一个开源的跨平台系统,为开发人员提供了一整套用于图像分析的软件工具。其中,SimpleITK是一个基于ITK的简化层,旨在促进快速原型设计,教育,解释语言中的使用。SimpleITK是一个图像分析工具包,具有大量的组件,支持过滤操作,图像分割和配准。SimpleITK使用C++编写,也可以用于包括Python在内的大量编程语言。
资源
有许多Jupyter Notebooks展示了SimpleITK在教育和研究中的使用。使用SimpleITK进行Python和R编程语言的交互式图像分析。
示例
下面是使用SimpleITK和Python实现的CT/MR配准过程的可视化。源代码。
9. pgmagick
pgmagick是使用Python包装的GraphicsMagick库。GraphicsMagick有时被称为图像处理中的瑞士军刀。它提供了强大高效的工具和库集合,支持超过88种主要图像格式的读取,写入和操作,包括DPX,GIF,JPEG,JPEG-2000,PNG,PDF,PNM和TIFF等重要格式。
资源
Github仓库,有安装和要求说明,详细的用户指南。
示例
一些使用 pgmagick 的图像操作:
图像缩放:
边缘提取:
10. Pycairo
Pycairo是cairo图形库的一组python绑定。Cairo是一个绘制矢量图形的2D图形库。矢量图形在调整大小或变换时不会丢失清晰度。Pycairo可使用Python调用cairo命令。
资源
Pycairo GitHub仓库有安装和使用的详细说明。以及Pycairo的简要教程。
示例
使用Pycairo绘制线段,基本形状和径向渐变(radial gradients)。