10 個 Python 影象編輯工具

Python開發者發表於2019-04-10

(給Python開發者加星標,提升Python技能


編譯:linux-中國,作者: Parul Pandey

https://linux.cn/article-10679-1.html

以下提到的這些 Python 工具在編輯影象、操作影象底層資料方面都提供了簡單直接的方法。

當今的世界充滿了資料,而影象資料就是其中很重要的一部分。但只有經過處理和分析,提高影象的質量,從中提取出有效地資訊,才能利用到這些影象資料。

常見的影象處理操作包括顯示影象,基本的影象操作,如裁剪、翻轉、旋轉;影象的分割、分類、特徵提取;影象恢復;以及影象識別等等。Python 作為一種日益風靡的科學程式語言,是這些影象處理操作的最佳選擇。同時,在 Python 生態當中也有很多可以免費使用的優秀的影象處理工具。

下文將介紹 10 個可以用於影象處理任務的 Python 庫,它們在編輯影象、檢視影象底層資料方面都提供了簡單直接的方法。

1、scikit-image

scikit-image 是一個結合 NumPy 陣列使用的開源 Python 工具,它實現了可用於研究、教育、工業應用的演算法和應用程式。即使是對於剛剛接觸 Python 生態圈的新手來說,它也是一個在使用上足夠簡單的庫。同時它的程式碼質量也很高,因為它是由一個活躍的志願者社群開發的,並且通過了同行評審peer review

資源

scikit-image 的文件非常完善,其中包含了豐富的用例。

示例

可以通過匯入 skimage 使用,大部分的功能都可以在它的子模組中找到。

影象濾波image filtering

import matplotlib.pyplot as plt%matplotlib inlinefrom skimage import data,filtersimage = data.coins() # ... or any other NumPy array!edges = filters.sobel(image)plt.imshow(edges, cmap='gray')

640?wx_fmt=png

Image filtering in scikit-image

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

640?wx_fmt=png

Template matching in scikit-image

展示頁面可以看到更多相關的例子。

2、NumPy

NumPy 提供了對陣列的支援,是 Python 程式設計的一個核心庫。影象的本質其實也是一個包含畫素資料點的標準 NumPy 陣列,因此可以通過一些基本的 NumPy 操作(例如切片、掩膜mask花式索引fancy indexing等),就可以從畫素級別對影象進行編輯。通過 NumPy 陣列儲存的影象也可以被 skimage 載入並使用 matplotlib 顯示。

資源

在 NumPy 的官方文件中提供了完整的程式碼文件和資源列表。

示例

使用 NumPy 對影象進行掩膜mask操作:

import numpy as npfrom skimage import dataimport matplotlib.pyplot as plt%matplotlib inlineimage = data.camera()type(image)numpy.ndarray #Image is a NumPy array:mask = image < 87image[mask]=255plt.imshow(image, cmap='gray')

640?wx_fmt=png

NumPy

3、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,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>)

640?wx_fmt=png

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")

640?wx_fmt=png

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將蘋果和橘子融合到一起:

640?wx_fmt=jpeg

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 來實現一些簡易的計算機視覺測試

  • 錄影、視訊檔案、影象、視訊流都在支援範圍內

資源

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

示例

640?wx_fmt=png

SimpleCV

7、Mahotas

Mahotas 是另一個 Python 影象處理和計算機視覺庫。在影象處理方面,它支援濾波和形態學相關的操作;在計算機視覺方面,它也支援特徵計算feature computation興趣點檢測interest point detection區域性描述符local descriptors等功能。Mahotas 的介面使用了 Python 進行編寫,因此適合快速開發,而演算法使用 C++ 實現,並針對速度進行了優化。Mahotas 儘可能做到程式碼量少和依賴項少,因此它的運算速度非常快。可以參考官方文件瞭解更多詳細資訊。

資源

文件包含了安裝介紹、示例以及一些 Mahotas 的入門教程。

示例

Mahotas 力求使用少量的程式碼來實現功能。例如這個 Finding Wally 遊戲:

640?wx_fmt=png

Finding Wally problem in Mahotas

640?wx_fmt=png

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 影象配準過程:

640?wx_fmt=gif

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 倉庫中有相關的安裝說明、依賴列表,以及詳細的使用指引

示例

影象縮放:

640?wx_fmt=png

Image scaling in pgmagick

  • 原始碼 連結:https://pgmagick.readthedocs.io/en/latest/cookbook.html#scaling-a-jpeg-image

邊緣提取:

640?wx_fmt=png

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

640?wx_fmt=png

Pycairo

  • 原始碼 連結:http://zetcode.com/gfx/pycairo/basicdrawing/

總結

以上就是 Python 中的一些有用的影象處理庫,無論你有沒有聽說過、有沒有使用過,都值得試用一下並瞭解它們。


推薦閱讀

(點選標題可跳轉閱讀)

假裝很忙的三個命令列工具

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


覺得本文對你有幫助?請分享給更多人

關注「Python開發者」加星標,提升Python技能

640?wx_fmt=png

喜歡就點一下「好看」唄~

相關文章