由linux-中国编译,帕鲁尔Pandeyhttps://linux.cn/article-10679-1.html
以下提到的这些 Python 工具在编辑图像、操作图像底层数据方面都提供了简单直接的方法。
当今世界充满了数据,图像数据是其中非常重要的一部分。但是,只有对图像进行处理和分析,提高图像质量,从中提取有效信息,才能利用这些图像数据。
常见的图像处理操作包括显示图像,基本的图像操作,如裁剪、翻转、旋转;图像分割、分类和特征提取;图像恢复;和图像识别等。Python作为一种越来越流行的科学编程语言,是这些图像处理操作的最佳选择。同时,Python生态中有很多优秀的图像处理工具可以免费使用。
下面将介绍10个可用于图像处理任务的Python库。它们都提供了编辑图像和查看图像底层数据的简单而直接的方法。
1、scikit-image
Scikit-image是一个结合了NumPy array的开源Python工具。它实现可用于研究、教育和工业应用的算法和应用。即使对于不熟悉Python生态系统的初学者来说,这也是一个足够简单的库。同时,它的代码质量也非常高,因为它是由一个活跃的志愿者社区开发的,并且通过了同行评审。
peer review
资源
scikit-image的文档非常完善,包含了丰富的用例。
示例
导入skimage即可使用,大部分功能都可以在它的子模块中找到。
图像过滤:
将matplotlib.pyplot作为plt % matplotlib inlinefrom从skimage导入数据,filtersimage=data.coins() #.或任何其他NumPy数组!edges=filters . Sobel(image)PLT . im show(edges,cmap='gray ')
sci kit-image中的图像过滤
使用match_template()方法实现模板匹配。
模板匹配:
sci kit-image中的模板匹配
你可以在展览页面上看到更多相关的例子。
2、NumPy
NumPy提供数组支持,是Python编程的核心库。图像的本质实际上是一个包含像素数据点的标准NumPy数组,因此可以通过一些基本的NumPy操作(如切片、遮罩
(面膜)、花式索引等。),可以从像素级别编辑图像。NumPy数组存储的图像也可以通过skimage加载,通过matplotlib显示。
资源
NumPy的官方文档中提供了代码文档和资源的完整列表。
示例
用NumPy遮罩图像:
import NumPy as NP from skim age import data import matplotlib . py plot as PLT % matplotlib inline Image=data . camera()type(Image)NumPy . ndarray # Image是一个NumPy array : mask=Image 87 Image=255 PLT . im show(Image,cmap='gray ')
号码
3、SciPy
和NumPy一样,SciPy是Python的核心科学计算模块,也可以用于图像的基本运算和处理。尤其是SciPy v1.1.0中的scipy.ndimage子模块,它提供了对n维NumPy数组的操作。
行的函数。SciPy 目前还提供了线性和非线性滤波(linear and non-linear filtering),二值形态学(binary morphology)、B 样条插值(B-spline interpolation)、对象测量(object measurements)等方面的函数。资源
在官方文档中可以查阅到 scipy.ndimage 的完整函数列表。
示例
使用 SciPy 的高斯滤波对图像进行模糊处理:
from scipy import misc,ndimageface = misc.face()blurred_face = ndimage.gaussian_filter(face, sigma=3)very_blurred = ndimage.gaussian_filter(face, sigma=5)#Resultsplt.imshow(<image to be displayed>)
Using a Gaussian filter in SciPy
4、PIL/Pillow
PIL (Python Imaging Library) 是一个免费 Python 编程库,它提供了对多种格式图像文件的打开、编辑、保存的支持。但在 2009 年之后 PIL 就停止发布新版本了。幸运的是,还有一个 PIL 的积极开发的分支 Pillow,它的安装过程比 PIL 更加简单,支持大部分主流的操作系统,并且还支持 Python 3。Pillow 包含了图像的基础处理功能,包括像素点操作、使用内置卷积内核进行滤波、颜色空间转换等等。
资源
Pillow 的官方文档提供了 Pillow 的安装说明自己代码库中每一个模块的示例。
示例
使用 Pillow 中的 ImageFilter 模块实现图像增强:
from PIL import Image,ImageFilter#Read imageim = Image.open('image.jpg')#Display imageim.show()from PIL import ImageEnhanceenh = ImageEnhance.Contrast(im)enh.enhance(1.8).show("30% more contrast")
Enhancing an image in Pillow using ImageFilter
源码 链接:http://sipi.usc.edu/database/
5、OpenCV-Python
OpenCV(Open Source Computer Vision 库)是计算机视觉领域最广泛使用的库之一,OpenCV-Python 则是 OpenCV 的 Python API。OpenCV-Python 的运行速度很快,这归功于它使用 C/C++ 编写的后台代码,同时由于它使用了 Python 进行封装,因此调用和部署的难度也不大。这些优点让 OpenCV-Python 成为了计算密集型计算机视觉应用程序的一个不错的选择。
资源
入门之前最好先阅读 OpenCV2-Python-Guide 这份文档。
示例
使用 OpenCV-Python 中的金字塔融合
Pyramid Blending
将苹果和橘子融合到一起:
Image blending using Pyramids in OpenCV-Python
源码 链接:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_pyramids/py_pyramids.html#pyramids
6、SimpleCV
SimpleCV 是一个开源的计算机视觉框架。它支持包括 OpenCV 在内的一些高性能计算机视觉库,同时不需要去了解位深度(bit depth)、文件格式、色彩空间(color space)之类的概念,因此 SimpleCV 的学习曲线要比 OpenCV 平缓得多,正如它的口号所说,“将计算机视觉变得更简单”。SimpleCV 的优点还有:
即使是刚刚接触计算机视觉的程序员也可以通过 SimpleCV 来实现一些简易的计算机视觉测试录像、视频文件、图像、视频流都在支持范围内资源
官方文档简单易懂,同时也附有大量的学习用例。
示例
SimpleCV
7、Mahotas
Mahotas 是另一个 Python 图像处理和计算机视觉库。在图像处理方面,它支持滤波和形态学相关的操作;在计算机视觉方面,它也支持特征计算(feature computation)、兴趣点检(interest point detection)、局部描述符(local descriptors)等功能。Mahotas 的接口使用了 Python 进行编写,因此适合快速开发,而算法使用 C++ 实现,并针对速度进行了优化。Mahotas 尽可能做到代码量少和依赖项少,因此它的运算速度非常快。可以参考官方文档了解更多详细信息。
资源
文档包含了安装介绍、示例以及一些 Mahotas 的入门教程。
示例
Mahotas 力求使用少量的代码来实现功能。例如这个 Finding Wally 游戏:
Finding Wally problem in Mahotas
Finding Wally problem in Mahotas
源码 链接:https://mahotas.readthedocs.io/en/latest/wally.html
8、SimpleITK
ITK(Insight Segmentation and Registration Toolkit)是一个为开发者提供普适性图像分析功能的开源、跨平台工具套件,SimpleITK 则是基于 ITK 构建出来的一个简化层,旨在促进 ITK 在快速原型设计、教育、解释语言中的应用。SimpleITK 作为一个图像分析工具包,它也带有大量的组件,可以支持常规的滤波、图像分割、图像配准(registration)功能。尽管 SimpleITK 使用 C++ 编写,但它也支持包括 Python 在内的大部分编程语言。
资源
有很多 Jupyter Notebooks 用例可以展示 SimpleITK 在教育和科研领域中的应用,通过这些用例可以看到如何使用 Python 和 R 利用 SimpleITK 来实现交互式图像分析。
示例
使用 Python + SimpleITK 实现的 CT/MR 图像配准过程:
SimpleITK animation
源码 链接:https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks/blob/master/Utilities/intro_animation.py
9、pgmagick
pgmagick 是使用 Python 封装的 GraphicsMagick 库。GraphicsMagick 通常被认为是图像处理界的瑞士军刀,因为它强大而又高效的工具包支持对多达 88 种主流格式图像文件的读写操作,包括 DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM、TIFF 等等。
资源
pgmagick 的 GitHub 仓库中有相关的安装说明、依赖列表,以及详细的使用指引。
示例
图像缩放:
Image scaling in pgmagick
源码 链接:https://pgmagick.readthedocs.io/en/latest/cookbook.html#scaling-a-jpeg-image
边缘提取:
Edge extraction in pgmagick
源码 链接:https://pgmagick.readthedocs.io/en/latest/cookbook.html#edge-extraction
10、Pycairo
Cairo 是一个用于绘制矢量图的二维图形库,而 Pycairo 是用于 Cairo 的一组 Python 绑定。矢量图的优点在于做大小缩放的过程中不会丢失图像的清晰度。使用 Pycairo 可以在 Python 中调用 Cairo 的相关命令。
资源
Pycairo 的 GitHub 仓库提供了关于安装和使用的详细说明,以及一份简要介绍 Pycairo 的入门指南。
示例
使用 Pycairo 绘制线段、基本图形、径向渐变
radial gradients
:
Pycairo
源码 链接:http://zetcode.com/gfx/pycairo/basicdrawing/
总结
以上就是 Python 中的一些有用的图像处理库,无论你有没有听说过、有没有使用过,都值得试用一下并了解它们。
最后,我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,可以送给每一位喜欢Python的小伙伴,想要获取的可以关注我的头条号并在后台私信我:01,即可免费获取。