Skip to main content

10 个 Python 图像编辑工具 | Linux 中国

当今的世界充满了数据,而图像数据就是其中很重要的一部分。但只有经过处理和分析,提高图像的质量,从中提取出有效地信息,才能利用到这些图像数据。
常见的图像处理操作包括显示图像,基本的图像操作,如裁剪、翻转、旋转;图像的分割、分类、特征提取;图像恢复;以及图像识别等等。Python 作为一种日益风靡的科学编程语言,是这些图像处理操作的最佳选择。同时,在 Python 生态当中也有很多可以免费使用的优秀的图像处理工具。
下文将介绍 10 个可以用于图像处理任务的 Python 库,它们在编辑图像、查看图像底层数据方面都提供了简单直接的方法。
1、scikit-image
scikit-image[1] 是一个结合 NumPy[2] 数组使用的开源 Python 工具,它实现了可用于研究、教育、工业应用的算法和应用程序。即使是对于刚刚接触 Python 生态圈的新手来说,它也是一个在使用上足够简单的库。同时它的代码质量也很高,因为它是由一个活跃的志愿者社区开发的,并且通过了同行评审peer review
资源
scikit-image 的文档[3]非常完善,其中包含了丰富的用例。
示例
可以通过导入 skimage 使用,大部分的功能都可以在它的子模块中找到。
图像滤波image filtering
  1. import matplotlib.pyplot as plt
  2. %matplotlib inline
  3. from skimage import data,filters
  4. image = data.coins() # ... or any other NumPy array!
  5. edges = filters.sobel(image)
  6. plt.imshow(edges, cmap='gray')
Image filtering in scikit-image
使用 match_template()[4] 方法实现模板匹配template matching
Template matching in scikit-image
展示页面[5]可以看到更多相关的例子。
2、NumPy
NumPy[6] 提供了对数组的支持,是 Python 编程的一个核心库。图像的本质其实也是一个包含像素数据点的标准 NumPy 数组,因此可以通过一些基本的 NumPy 操作(例如切片、掩膜mask花式索引fancy indexing等),就可以从像素级别对图像进行编辑。通过 NumPy 数组存储的图像也可以被 skimage 加载并使用 matplotlib 显示。
资源
在 NumPy 的官方文档[6]中提供了完整的代码文档和资源列表。
示例
使用 NumPy 对图像进行掩膜mask操作:
  1. import numpy as np
  2. from skimage import data
  3. import matplotlib.pyplot as plt
  4. %matplotlib inline
  5. image = data.camera()
  6. type(image)
  7. numpy.ndarray #Image is a NumPy array:
  8. mask = image < 87
  9. image[mask]=255
  10. plt.imshow(image, cmap='gray')
NumPy
3、SciPy
像 NumPy 一样,SciPy[7] 是 Python 的一个核心科学计算模块,也可以用于图像的基本操作和处理。尤其是 SciPy v1.1.0 中的 scipy.ndimage[8] 子模块,它提供了在 n 维 NumPy 数组上的运行的函数。SciPy 目前还提供了线性和非线性滤波linear and non-linear filtering二值形态学binary morphologyB 样条插值B-spline interpolation对象测量object measurements等方面的函数。
资源
官方文档[9]中可以查阅到 scipy.ndimage 的完整函数列表。
示例
使用 SciPy 的高斯滤波[10]对图像进行模糊处理:
  1. from scipy import misc,ndimage
  2. face = misc.face()
  3. blurred_face = ndimage.gaussian_filter(face, sigma=3)
  4. very_blurred = ndimage.gaussian_filter(face, sigma=5)
  5. #Results
  6. plt.imshow(<image to be displayed>)
Using a Gaussian filter in SciPy
4、PIL/Pillow
PIL (Python Imaging Library) 是一个免费 Python 编程库,它提供了对多种格式图像文件的打开、编辑、保存的支持。但在 2009 年之后 PIL 就停止发布新版本了。幸运的是,还有一个 PIL 的积极开发的分支 Pillow[11],它的安装过程比 PIL 更加简单,支持大部分主流的操作系统,并且还支持 Python 3。Pillow 包含了图像的基础处理功能,包括像素点操作、使用内置卷积内核进行滤波、颜色空间转换等等。
资源
Pillow 的官方文档[12]提供了 Pillow 的安装说明自己代码库中每一个模块的示例。
示例
使用 Pillow 中的 ImageFilter 模块实现图像增强:
  1. from PIL import Image,ImageFilter
  2. #Read image
  3. im = Image.open('image.jpg')
  4. #Display image
  5. im.show()
  6. from PIL import ImageEnhance
  7. enh = ImageEnhance.Contrast(im)
  8. enh.enhance(1.8).show("30% more contrast")
Enhancing an image in Pillow using ImageFilter
◈ 源码[13]
5、OpenCV-Python
OpenCV(Open Source Computer Vision 库)是计算机视觉领域最广泛使用的库之一,OpenCV-Python[14] 则是 OpenCV 的 Python API。OpenCV-Python 的运行速度很快,这归功于它使用 C/C++ 编写的后台代码,同时由于它使用了 Python 进行封装,因此调用和部署的难度也不大。这些优点让 OpenCV-Python 成为了计算密集型计算机视觉应用程序的一个不错的选择。
资源
入门之前最好先阅读 OpenCV2-Python-Guide[15] 这份文档。
示例
使用 OpenCV-Python 中的金字塔融合Pyramid Blending将苹果和橘子融合到一起:
Image blending using Pyramids in OpenCV-Python
◈ 源码[16]
6、SimpleCV
SimpleCV[17] 是一个开源的计算机视觉框架。它支持包括 OpenCV 在内的一些高性能计算机视觉库,同时不需要去了解位深度bit depth、文件格式、色彩空间color space之类的概念,因此 SimpleCV 的学习曲线要比 OpenCV 平缓得多,正如它的口号所说,“将计算机视觉变得更简单”。SimpleCV 的优点还有:
◈ 即使是刚刚接触计算机视觉的程序员也可以通过 SimpleCV 来实现一些简易的计算机视觉测试
◈ 录像、视频文件、图像、视频流都在支持范围内
资源
官方文档[18]简单易懂,同时也附有大量的学习用例。
示例
SimpleCV
7、Mahotas
Mahotas[19] 是另一个 Python 图像处理和计算机视觉库。在图像处理方面,它支持滤波和形态学相关的操作;在计算机视觉方面,它也支持特征计算feature computation兴趣点检测interest point detection局部描述符local descriptors等功能。Mahotas 的接口使用了 Python 进行编写,因此适合快速开发,而算法使用 C++ 实现,并针对速度进行了优化。Mahotas 尽可能做到代码量少和依赖项少,因此它的运算速度非常快。可以参考官方文档[20]了解更多详细信息。
资源
文档[21]包含了安装介绍、示例以及一些 Mahotas 的入门教程。
示例
Mahotas 力求使用少量的代码来实现功能。例如这个 Finding Wally[22] 游戏:
Finding Wally problem in Mahotas
Finding Wally problem in Mahotas
◈ 源码[23]
8、SimpleITK
ITK[24](Insight Segmentation and Registration Toolkit)是一个为开发者提供普适性图像分析功能的开源、跨平台工具套件,SimpleITK[25] 则是基于 ITK 构建出来的一个简化层,旨在促进 ITK 在快速原型设计、教育、解释语言中的应用。SimpleITK 作为一个图像分析工具包,它也带有大量的组件[26],可以支持常规的滤波、图像分割、图像配准registration功能。尽管 SimpleITK 使用 C++ 编写,但它也支持包括 Python 在内的大部分编程语言。
资源
有很多 Jupyter Notebooks[27] 用例可以展示 SimpleITK 在教育和科研领域中的应用,通过这些用例可以看到如何使用 Python 和 R 利用 SimpleITK 来实现交互式图像分析。
示例
使用 Python + SimpleITK 实现的 CT/MR 图像配准过程: https://img.linux.net.cn/data/attachment/album/201904/03/113931lfirzfq3z7eqypq3.gif 
◈ 源码[28]
9、pgmagick
pgmagick[29] 是使用 Python 封装的 GraphicsMagick 库。GraphicsMagick[30] 通常被认为是图像处理界的瑞士军刀,因为它强大而又高效的工具包支持对多达 88 种主流格式图像文件的读写操作,包括 DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM、TIFF 等等。
资源
pgmagick 的 GitHub 仓库[31]中有相关的安装说明、依赖列表,以及详细的使用指引[32]
示例
图像缩放:
Image scaling in pgmagick
◈ 源码[33]
边缘提取:
Edge extraction in pgmagick
◈ 源码[34]
10、Pycairo
Cairo[35] 是一个用于绘制矢量图的二维图形库,而 Pycairo[36] 是用于 Cairo 的一组 Python 绑定。矢量图的优点在于做大小缩放的过程中不会丢失图像的清晰度。使用 Pycairo 可以在 Python 中调用 Cairo 的相关命令。
资源
Pycairo 的 GitHub 仓库[37]提供了关于安装和使用的详细说明,以及一份简要介绍 Pycairo 的入门指南[38]
示例
使用 Pycairo 绘制线段、基本图形、径向渐变radial gradients
Pycairo
◈ 源码[39]
总结
以上就是 Python 中的一些有用的图像处理库,无论你有没有听说过、有没有使用过,都值得试用一下并了解它们。

via: https://opensource.com/article/19/3/python-image-manipulation-tools

Comments

Popular posts from this blog

OWASP Top 10 Threats and Mitigations Exam - Single Select

Last updated 4 Aug 11 Course Title: OWASP Top 10 Threats and Mitigation Exam Questions - Single Select 1) Which of the following consequences is most likely to occur due to an injection attack? Spoofing Cross-site request forgery Denial of service   Correct Insecure direct object references 2) Your application is created using a language that does not support a clear distinction between code and data. Which vulnerability is most likely to occur in your application? Injection   Correct Insecure direct object references Failure to restrict URL access Insufficient transport layer protection 3) Which of the following scenarios is most likely to cause an injection attack? Unvalidated input is embedded in an instruction stream.   Correct Unvalidated input can be distinguished from valid instructions. A Web application does not validate a client’s access to a resource. A Web action performs an operation on behalf of the user without checking a shared sec

CKA Simulator Kubernetes 1.22

  https://killer.sh Pre Setup Once you've gained access to your terminal it might be wise to spend ~1 minute to setup your environment. You could set these: alias k = kubectl                         # will already be pre-configured export do = "--dry-run=client -o yaml"     # k get pod x $do export now = "--force --grace-period 0"   # k delete pod x $now Vim To make vim use 2 spaces for a tab edit ~/.vimrc to contain: set tabstop=2 set expandtab set shiftwidth=2 More setup suggestions are in the tips section .     Question 1 | Contexts Task weight: 1%   You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts . Next write a command to display the current context into /opt/course/1/context_default_kubectl.sh , the command should use kubectl . Finally write a second command doing the same thing into /opt/course/1/context_default_no_kubectl.sh , but without the use of k

标 题: 关于Daniel Guo 律师

发信人: q123452017 (水天一色), 信区: I140 标  题: 关于Daniel Guo 律师 关键字: Daniel Guo 发信站: BBS 未名空间站 (Thu Apr 26 02:11:35 2018, 美东) 这些是lz根据亲身经历在 Immigration版上发的帖以及一些关于Daniel Guo 律师的回 帖,希望大家不要被一些马甲帖广告帖所骗,慎重考虑选择律师。 WG 和Guo两家律师对比 1. fully refund的合约上的区别 wegreened家是case不过只要第二次没有file就可以fully refund。郭家是要两次case 没过才给refund,而且只要第二次pl draft好律师就可以不退任何律师费。 2. 回信速度 wegreened家一般24小时内回信。郭律师是在可以快速回复的时候才回复很快,对于需 要时间回复或者是不愿意给出确切答复的时候就回复的比较慢。 比如:lz问过郭律师他们律所在nsc区域最近eb1a的通过率,大家也知道nsc现在杀手如 云,但是郭律师过了两天只回复说让秘书update最近的case然后去网页上查,但是上面 并没有写明tsc还是nsc。 lz还问过郭律师关于准备ps (他要求的文件)的一些问题,模版上有的东西不是很清 楚,但是他一般就是把模版上的东西再copy一遍发过来。 3. 材料区别 (推荐信) 因为我只收到郭律师写的推荐信,所以可以比下两家推荐信 wegreened家推荐信写的比较长,而且每封推荐信会用不同的语气和风格,会包含lz写 的research summary里面的某个方面 郭家四封推荐信都是一个格式,一种语气,连地址,信的称呼都是一样的,怎么看四封 推荐信都是同一个人写出来的。套路基本都是第一段目的,第二段介绍推荐人,第三段 某篇或几篇文章的abstract,最后结论 4. 前期材料准备 wegreened家要按照他们的模版准备一个十几页的research summary。 郭律师在签约之前说的是只需要准备五页左右的summary,但是在lz签完约收到推荐信 ,郭律师又发来一个很长的ps要lz自己填,而且和pl的格式基本差不多。 总结下来,申请自己上心最重要。但是如果选律师,lz更倾向于wegreened,