10 个 Python 图像编辑工具

论坛 期权论坛 期权     
Python开发者   2019-7-13 18:02   4508   0
(给Python开发者加星标,提升Python技能)
编译:linux-中国,作者: Parul Pandey
https://linux.cn/article-10679-1.html
以下提到的这些 Python 工具在编辑图像、操作图像底层数据方面都提供了简单直接的方法。
当今的世界充满了数据,而图像数据就是其中很重要的一部分。但只有经过处理和分析,提高图像的质量,从中提取出有效地信息,才能利用到这些图像数据。
常见的图像处理操作包括显示图像,基本的图像操作,如裁剪、翻转、旋转;图像的分割、分类、特征提取;图像恢复;以及图像识别等等。Python 作为一种日益风靡的科学编程语言,是这些图像处理操作的最佳选择。同时,在 Python 生态当中也有很多可以免费使用的优秀的图像处理工具。
下文将介绍 10 个可以用于图像处理任务的 Python 库,它们在编辑图像、查看图像底层数据方面都提供了简单直接的方法。
[h2]1、scikit-image[/h2]scikit-image 是一个结合 NumPy 数组使用的开源 Python 工具,它实现了可用于研究、教育、工业应用的算法和应用程序。即使是对于刚刚接触 Python 生态圈的新手来说,它也是一个在使用上足够简单的库。同时它的代码质量也很高,因为它是由一个活跃的志愿者社区开发的,并且通过了同行评审peer review。
[h3]资源[/h3]scikit-image 的文档非常完善,其中包含了丰富的用例。
[h3]示例[/h3]可以通过导入
  1. skimage
复制代码
使用,大部分的功能都可以在它的子模块中找到。
图像滤波image filtering:
  1. import matplotlib.pyplot as plt
复制代码
  1. %matplotlib inline
复制代码
  1. from skimage import data,filters
复制代码
  1. image = data.coins() # ... or any other NumPy array!
复制代码
  1. edges = filters.sobel(image)
复制代码
  1. plt.imshow(edges, cmap='gray')
复制代码


Image filtering in scikit-image
使用 match_template() 方法实现模板匹配template matching:


Template matching in scikit-image
在展示页面可以看到更多相关的例子。
[h2]2、NumPy[/h2]NumPy 提供了对数组的支持,是 Python 编程的一个核心库。图像的本质其实也是一个包含像素数据点的标准 NumPy 数组,因此可以通过一些基本的 NumPy 操作(例如切片、掩膜mask、花式索引fancy indexing等),就可以从像素级别对图像进行编辑。通过 NumPy 数组存储的图像也可以被 skimage 加载并使用 matplotlib 显示。
[h3]资源[/h3]在 NumPy 的官方文档中提供了完整的代码文档和资源列表。
[h3]示例[/h3]使用 NumPy 对图像进行掩膜mask操作:
  1. import numpy as np
复制代码
  1. from skimage import data
复制代码
  1. import matplotlib.pyplot as plt
复制代码
  1. %matplotlib inline
复制代码
  1. image = data.camera()
复制代码
  1. type(image)
复制代码
  1. numpy.ndarray #Image is a NumPy array:
复制代码
  1. mask = image < 87
复制代码
  1. image[mask]=255
复制代码
  1. plt.imshow(image, cmap='gray')
复制代码


NumPy
[h2]3、SciPy[/h2]像 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等方面的函数。
[h3]资源[/h3]在官方文档中可以查阅到
  1. scipy.ndimage
复制代码
的完整函数列表。
[h3]示例[/h3]使用 SciPy 的高斯滤波对图像进行模糊处理:
  1. from scipy import misc,ndimage
复制代码
  1. face = misc.face()
复制代码
  1. blurred_face = ndimage.gaussian_filter(face, sigma=3)
复制代码
  1. very_blurred = ndimage.gaussian_filter(face, sigma=5)
复制代码
  1. #Results
复制代码
  1. plt.imshow()
复制代码


Using a Gaussian filter in SciPy
[h2]4、PIL/Pillow[/h2]PIL (Python Imaging Library) 是一个免费 Python 编程库,它提供了对多种格式图像文件的打开、编辑、保存的支持。但在 2009 年之后 PIL 就停止发布新版本了。幸运的是,还有一个 PIL 的积极开发的分支 Pillow,它的安装过程比 PIL 更加简单,支持大部分主流的操作系统,并且还支持 Python 3。Pillow 包含了图像的基础处理功能,包括像素点操作、使用内置卷积内核进行滤波、颜色空间转换等等。
[h3]资源[/h3]Pillow 的官方文档提供了 Pillow 的安装说明自己代码库中每一个模块的示例。
[h3]示例[/h3]使用 Pillow 中的 ImageFilter 模块实现图像增强:
  1. from PIL import Image,ImageFilter
复制代码
  1. #Read image
复制代码
  1. im = Image.open('image.jpg')
复制代码
  1. #Display image
复制代码
  1. im.show()
复制代码
  1. from PIL import ImageEnhance
复制代码
  1. enh = ImageEnhance.Contrast(im)
复制代码
  1. enh.enhance(1.8).show("30% more contrast")
复制代码


Enhancing an image in Pillow using ImageFilter
  • 源码  链接:http://sipi.usc.edu/database/
[h2]5、OpenCV-Python[/h2]OpenCV(Open Source Computer Vision 库)是计算机视觉领域最广泛使用的库之一,OpenCV-Python 则是 OpenCV 的 Python API。OpenCV-Python 的运行速度很快,这归功于它使用 C/C++ 编写的后台代码,同时由于它使用了 Python 进行封装,因此调用和部署的难度也不大。这些优点让 OpenCV-Python 成为了计算密集型计算机视觉应用程序的一个不错的选择。
[h3]资源[/h3]入门之前最好先阅读 OpenCV2-Python-Guide 这份文档。
[h3]示例[/h3]使用 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
[h2]6、SimpleCV[/h2]SimpleCV 是一个开源的计算机视觉框架。它支持包括 OpenCV 在内的一些高性能计算机视觉库,同时不需要去了解位深度bit depth、文件格式、色彩空间color space之类的概念,因此 SimpleCV 的学习曲线要比 OpenCV 平缓得多,正如它的口号所说,“将计算机视觉变得更简单”。SimpleCV 的优点还有:
  • 即使是刚刚接触计算机视觉的程序员也可以通过 SimpleCV 来实现一些简易的计算机视觉测试
  • 录像、视频文件、图像、视频流都在支持范围内
[h3]资源[/h3]官方文档简单易懂,同时也附有大量的学习用例。
[h3]示例[/h3]

SimpleCV
[h2]7、Mahotas[/h2]Mahotas 是另一个 Python 图像处理和计算机视觉库。在图像处理方面,它支持滤波和形态学相关的操作;在计算机视觉方面,它也支持特征计算feature computation、兴趣点检测interest point detection、局部描述符local descriptors等功能。Mahotas 的接口使用了 Python 进行编写,因此适合快速开发,而算法使用 C++ 实现,并针对速度进行了优化。Mahotas 尽可能做到代码量少和依赖项少,因此它的运算速度非常快。可以参考官方文档了解更多详细信息。
[h3]资源[/h3]文档包含了安装介绍、示例以及一些 Mahotas 的入门教程。
[h3]示例[/h3]Mahotas 力求使用少量的代码来实现功能。例如这个 Finding Wally 游戏:


Finding Wally problem in Mahotas


Finding Wally problem in Mahotas
  • 源码 链接:https://mahotas.readthedocs.io/en/latest/wally.html
[h2]8、SimpleITK[/h2]ITK(Insight Segmentation and Registration Toolkit)是一个为开发者提供普适性图像分析功能的开源、跨平台工具套件,SimpleITK 则是基于 ITK 构建出来的一个简化层,旨在促进 ITK 在快速原型设计、教育、解释语言中的应用。SimpleITK 作为一个图像分析工具包,它也带有大量的组件,可以支持常规的滤波、图像分割、图像配准registration功能。尽管 SimpleITK 使用 C++ 编写,但它也支持包括 Python 在内的大部分编程语言。
[h3]资源[/h3]有很多 Jupyter Notebooks 用例可以展示 SimpleITK 在教育和科研领域中的应用,通过这些用例可以看到如何使用 Python 和 R 利用 SimpleITK 来实现交互式图像分析。
[h3]示例[/h3]使用 Python + SimpleITK 实现的 CT/MR 图像配准过程:


SimpleITK animation
  • 源码 链接:https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks/blob/master/Utilities/intro_animation.py
[h2]9、pgmagick[/h2]pgmagick 是使用 Python 封装的 GraphicsMagick 库。GraphicsMagick 通常被认为是图像处理界的瑞士军刀,因为它强大而又高效的工具包支持对多达 88 种主流格式图像文件的读写操作,包括 DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM、TIFF 等等。
[h3]资源[/h3]pgmagick 的 GitHub 仓库中有相关的安装说明、依赖列表,以及详细的使用指引。
[h3]示例[/h3]图像缩放:


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
[h2]10、Pycairo[/h2]Cairo 是一个用于绘制矢量图的二维图形库,而 Pycairo 是用于 Cairo 的一组 Python 绑定。矢量图的优点在于做大小缩放的过程中不会丢失图像的清晰度。使用 Pycairo 可以在 Python 中调用 Cairo 的相关命令。
[h3]资源[/h3]Pycairo 的 GitHub 仓库提供了关于安装和使用的详细说明,以及一份简要介绍 Pycairo 的入门指南。
[h3]示例[/h3]使用 Pycairo 绘制线段、基本图形、径向渐变radial gradients:


Pycairo
  • 源码 链接:http://zetcode.com/gfx/pycairo/basicdrawing/
[h2]总结[/h2]以上就是 Python 中的一些有用的图像处理库,无论你有没有听说过、有没有使用过,都值得试用一下并了解它们。

推荐阅读
(点击标题可跳转阅读)
[/url]
[url=http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652567728&idx=1&sn=037b9abdc49e4915338380899eec55f5&chksm=8464d0fab31359ec6074a53b00a47593dab53de09a1399a7e9a78d2ec1e54637394e2e42d6e1&scene=21#wechat_redirect]假装很忙的三个命令行工具

Python 官方推荐的一款打包工具


觉得本文对你有帮助?请分享给更多人
关注「Python开发者」加星标,提升Python技能

喜欢就点一下「好看」呗~
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:835
帖子:167
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP