Linux中國

10 個 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 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](/data/attachment/album/201904/03/113909w24q3hjhg2qjz0g8.png "Image filtering in scikit-image")

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

![Template matching in scikit-image](/data/attachment/album/201904/03/113910eijjkg19yrjd07hk.png "Template matching in scikit-image")

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

2、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=&apos;gray&apos;)

![NumPy](/data/attachment/album/201904/03/113910nyuuf7z8qpydyzwk.png "NumPy")

3、SciPy

像 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 等方面的函數。

資源

官方文檔中可以查閱到 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](/data/attachment/album/201904/03/113911hw2eh1jebi2hjc3j.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 image
im = Image.open(&apos;image.jpg&apos;)
#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](/data/attachment/album/201904/03/113911l2klvtypay0vxtlv.png "Enhancing an image in Pillow using ImageFilter")

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

![Image blending using Pyramids in OpenCV-Python](/data/attachment/album/201904/03/113912jz8qw8rp6wtzzefp.jpg "Image blending using Pyramids in OpenCV-Python")

6、SimpleCV

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

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

資源

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

示例

![SimpleCV](/data/attachment/album/201904/03/113914m8mg2208kknztmmf.png "SimpleCV")

7、Mahotas

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

資源

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

示例

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

![Finding Wally problem in Mahotas](/data/attachment/album/201904/03/113915bo76fif7ob1ygy9o.png "Finding Wally problem in Mahotas")

![Finding Wally problem in Mahotas](/data/attachment/album/201904/03/113916evwafw4hvwhq8rqb.png "Finding Wally problem in Mahotas")

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 圖像配准過程:

![SimpleITK animation](/data/attachment/album/201904/03/113931lfirzfq3z7eqypq3.gif "SimpleITK animation")

9、pgmagick

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

資源

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

示例

圖像縮放:

![Image scaling in pgmagick](/data/attachment/album/201904/03/113932lavabuxxnvud84uv.png "Image scaling in pgmagick")

邊緣提取:

![Edge extraction in pgmagick](/data/attachment/album/201904/03/113933mroouhu2fnrfxx00.png "Edge extraction in pgmagick")

10、Pycairo

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

資源

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

示例

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

![Pycairo](/data/attachment/album/201904/03/113934to6waz70p67i7u6u.png "Pycairo")

總結

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

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

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

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


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國