10 個 Python 圖像編輯工具

如下提到的這些 Python 工具在編輯圖像、操做圖像底層數據方面都提供了簡單直接的方法。html

當今的世界充滿了數據,而圖像數據就是其中很重要的一部分。但只有通過處理和分析,提升圖像的質量,從中提取出有效地信息,才能利用到這些圖像數據。python

常見的圖像處理操做包括顯示圖像,基本的圖像操做,如裁剪、翻轉、旋轉;圖像的分割、分類、特徵提取;圖像恢復;以及圖像識別等等。Python 做爲一種日益風靡的科學編程語言,是這些圖像處理操做的最佳選擇。同時,在 Python 生態當中也有不少能夠無償使用的優秀的圖像處理工具。linux

下文將介紹 10 個能夠用於圖像處理任務的 Python 庫,它們在編輯圖像、查看圖像底層數據方面都提供了簡單直接的方法。git

一、scikit-image

scikit-image 是一個結合 NumPy 數組使用的開源 Python 工具,它實現了可用於研究、教育、工業應用的算法和應用程序。即便是對於剛剛接觸 Python 生態圈的新手來講,它也是一個在使用上足夠簡單的庫。同時它的代碼質量也很高,由於它是由一個活躍的志願者社區開發的,而且經過了同行評審peer review程序員

資源

scikit-image 的文檔很是完善,其中包含了豐富的用例。github

示例

能夠經過導入 skimage 使用,大部分的功能均可以在它的子模塊中找到。算法

圖像濾波image filtering編程

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')
複製代碼

Image filtering in scikit-image
Image filtering in scikit-image

使用 match_template() 方法實現模板匹配template matching數組

Template matching in scikit-image
Template matching in scikit-image

展現頁面能夠看到更多相關的例子。ruby

二、NumPy

NumPy 提供了對數組的支持,是 Python 編程的一個核心庫。圖像的本質其實也是一個包含像素數據點的標準 NumPy 數組,所以能夠經過一些基本的 NumPy 操做(例如切片、掩膜mask花式索引fancy indexing等),就能夠從像素級別對圖像進行編輯。經過 NumPy 數組存儲的圖像也能夠被 skimage 加載並使用 matplotlib 顯示。

資源

在 NumPy 的官方文檔中提供了完整的代碼文檔和資源列表。

示例

使用 NumPy 對圖像進行掩膜mask操做:

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')
複製代碼

NumPy
NumPy

三、SciPy

像 NumPy 同樣,SciPy 是 Python 的一個核心科學計算模塊,也能夠用於圖像的基本操做和處理。尤爲是 SciPy v1.1.0 中的 scipy.ndimage 子模塊,它提供了在 n 維 NumPy 數組上的運行的函數。SciPy 目前還提供了線性和非線性濾波linear and non-linear filtering二值形態學binary morphologyB 樣條插值B-spline interpolation對象測量object measurements等方面的函數。

資源

官方文檔中能夠查閱到 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>)
複製代碼

Using a Gaussian filter in SciPy
Using a Gaussian filter in SciPy

四、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 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")
複製代碼

Enhancing an image in Pillow using ImageFilter
Enhancing an image in Pillow using ImageFilter

五、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
Image blending using Pyramids in OpenCV-Python

六、SimpleCV

SimpleCV 是一個開源的計算機視覺框架。它支持包括 OpenCV 在內的一些高性能計算機視覺庫,同時不須要去了解位深度bit depth、文件格式、色彩空間color space之類的概念,所以 SimpleCV 的學習曲線要比 OpenCV 平緩得多,正如它的口號所說,「將計算機視覺變得更簡單」。SimpleCV 的優勢還有:

  • 即便是剛剛接觸計算機視覺的程序員也能夠經過 SimpleCV 來實現一些簡易的計算機視覺測試
  • 錄像、視頻文件、圖像、視頻流都在支持範圍內

資源

官方文檔簡單易懂,同時也附有大量的學習用例。

示例

SimpleCV
SimpleCV

七、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

Finding Wally problem in Mahotas
Finding Wally problem in Mahotas

八、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
SimpleITK animation

九、pgmagick

pgmagick 是使用 Python 封裝的 GraphicsMagick 庫。GraphicsMagick 一般被認爲是圖像處理界的瑞士軍刀,由於它強大而又高效的工具包支持對多達 88 種主流格式圖像文件的讀寫操做,包括 DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM、TIFF 等等。

資源

pgmagick 的 GitHub 倉庫中有相關的安裝說明、依賴列表,以及詳細的使用指引

示例

圖像縮放:

Image scaling in pgmagick
Image scaling in pgmagick

邊緣提取:

Edge extraction in pgmagick
Edge extraction in pgmagick

十、Pycairo

Cairo 是一個用於繪製矢量圖的二維圖形庫,而 Pycairo 是用於 Cairo 的一組 Python 綁定。矢量圖的優勢在於作大小縮放的過程當中不會丟失圖像的清晰度。使用 Pycairo 能夠在 Python 中調用 Cairo 的相關命令。

資源

Pycairo 的 GitHub 倉庫提供了關於安裝和使用的詳細說明,以及一份簡要介紹 Pycairo 的入門指南

示例

使用 Pycairo 繪製線段、基本圖形、徑向漸變radial gradients

Pycairo
Pycairo

總結

以上就是 Python 中的一些有用的圖像處理庫,不管你有沒有據說過、有沒有使用過,都值得試用一下並瞭解它們。


via: opensource.com/article/19/…

做者:Parul Pandey 選題:lujun9972 譯者:HankChow 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章
相關標籤/搜索