歡迎光臨
每天分享高質量文章

10 個 Python 圖像編輯工具 | Linux 中國

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

— Parul Pandey

 

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

常見的圖像處理操作包括顯示圖像,基本的圖像操作,如裁剪、翻轉、旋轉;圖像的分割、分類、特征提取;圖像恢復;以及圖像識別等等。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 中的一些有用的圖像處理庫,無論你有沒有聽說過、有沒有使用過,都值得試用一下並瞭解它們。

赞(0)

分享創造快樂