如下提到的這些 Python 工具在編輯圖像、操做圖像底層數據方面都提供了簡單直接的方法。html
當今的世界充滿了數據,而圖像數據就是其中很重要的一部分。但只有通過處理和分析,提升圖像的質量,從中提取出有效地信息,才能利用到這些圖像數據。python
常見的圖像處理操做包括顯示圖像,基本的圖像操做,如裁剪、翻轉、旋轉;圖像的分割、分類、特徵提取;圖像恢復;以及圖像識別等等。Python 做爲一種日益風靡的科學編程語言,是這些圖像處理操做的最佳選擇。同時,在 Python 生態當中也有不少能夠無償使用的優秀的圖像處理工具。linux
下文將介紹 10 個能夠用於圖像處理任務的 Python 庫,它們在編輯圖像、查看圖像底層數據方面都提供了簡單直接的方法。git
scikit-image 是一個結合 NumPy 數組使用的開源 Python 工具,它實現了可用於研究、教育、工業應用的算法和應用程序。即便是對於剛剛接觸 Python 生態圈的新手來講,它也是一個在使用上足夠簡單的庫。同時它的代碼質量也很高,由於它是由一個活躍的志願者社區開發的,而且經過了同行評審。程序員
scikit-image 的文檔很是完善,其中包含了豐富的用例。github
能夠經過導入 skimage
使用,大部分的功能均可以在它的子模塊中找到。算法
圖像濾波:編程
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')
複製代碼
使用 match_template() 方法實現模板匹配:數組
在展現頁面能夠看到更多相關的例子。ruby
NumPy 提供了對數組的支持,是 Python 編程的一個核心庫。圖像的本質其實也是一個包含像素數據點的標準 NumPy 數組,所以能夠經過一些基本的 NumPy 操做(例如切片、掩膜、花式索引等),就能夠從像素級別對圖像進行編輯。經過 NumPy 數組存儲的圖像也能夠被 skimage 加載並使用 matplotlib 顯示。
在 NumPy 的官方文檔中提供了完整的代碼文檔和資源列表。
使用 NumPy 對圖像進行掩膜操做:
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 同樣,SciPy 是 Python 的一個核心科學計算模塊,也能夠用於圖像的基本操做和處理。尤爲是 SciPy v1.1.0 中的 scipy.ndimage 子模塊,它提供了在 n 維 NumPy 數組上的運行的函數。SciPy 目前還提供了線性和非線性濾波、二值形態學、B 樣條插值、對象測量等方面的函數。
在官方文檔中能夠查閱到 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>)
複製代碼
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")
複製代碼
OpenCV(Open Source Computer Vision 庫)是計算機視覺領域最普遍使用的庫之一,OpenCV-Python 則是 OpenCV 的 Python API。OpenCV-Python 的運行速度很快,這歸功於它使用 C/C++ 編寫的後臺代碼,同時因爲它使用了 Python 進行封裝,所以調用和部署的難度也不大。這些優勢讓 OpenCV-Python 成爲了計算密集型計算機視覺應用程序的一個不錯的選擇。
入門以前最好先閱讀 OpenCV2-Python-Guide 這份文檔。
使用 OpenCV-Python 中的金字塔融合將蘋果和橘子融合到一塊兒:
SimpleCV 是一個開源的計算機視覺框架。它支持包括 OpenCV 在內的一些高性能計算機視覺庫,同時不須要去了解位深度、文件格式、色彩空間之類的概念,所以 SimpleCV 的學習曲線要比 OpenCV 平緩得多,正如它的口號所說,「將計算機視覺變得更簡單」。SimpleCV 的優勢還有:
官方文檔簡單易懂,同時也附有大量的學習用例。
Mahotas 是另外一個 Python 圖像處理和計算機視覺庫。在圖像處理方面,它支持濾波和形態學相關的操做;在計算機視覺方面,它也支持特徵計算、興趣點檢測、局部描述符等功能。Mahotas 的接口使用了 Python 進行編寫,所以適合快速開發,而算法使用 C++ 實現,並針對速度進行了優化。Mahotas 儘量作到代碼量少和依賴項少,所以它的運算速度很是快。能夠參考官方文檔瞭解更多詳細信息。
文檔包含了安裝介紹、示例以及一些 Mahotas 的入門教程。
Mahotas 力求使用少許的代碼來實現功能。例如這個 Finding Wally 遊戲:
ITK(Insight Segmentation and Registration Toolkit)是一個爲開發者提供普適性圖像分析功能的開源、跨平臺工具套件,SimpleITK 則是基於 ITK 構建出來的一個簡化層,旨在促進 ITK 在快速原型設計、教育、解釋語言中的應用。SimpleITK 做爲一個圖像分析工具包,它也帶有大量的組件,能夠支持常規的濾波、圖像分割、圖像配準功能。儘管 SimpleITK 使用 C++ 編寫,但它也支持包括 Python 在內的大部分編程語言。
有不少 Jupyter Notebooks 用例能夠展現 SimpleITK 在教育和科研領域中的應用,經過這些用例能夠看到如何使用 Python 和 R 利用 SimpleITK 來實現交互式圖像分析。
使用 Python + SimpleITK 實現的 CT/MR 圖像配準過程:
pgmagick 是使用 Python 封裝的 GraphicsMagick 庫。GraphicsMagick 一般被認爲是圖像處理界的瑞士軍刀,由於它強大而又高效的工具包支持對多達 88 種主流格式圖像文件的讀寫操做,包括 DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM、TIFF 等等。
pgmagick 的 GitHub 倉庫中有相關的安裝說明、依賴列表,以及詳細的使用指引。
圖像縮放:
邊緣提取:
Cairo 是一個用於繪製矢量圖的二維圖形庫,而 Pycairo 是用於 Cairo 的一組 Python 綁定。矢量圖的優勢在於作大小縮放的過程當中不會丟失圖像的清晰度。使用 Pycairo 能夠在 Python 中調用 Cairo 的相關命令。
Pycairo 的 GitHub 倉庫提供了關於安裝和使用的詳細說明,以及一份簡要介紹 Pycairo 的入門指南。
使用 Pycairo 繪製線段、基本圖形、徑向漸變:
以上就是 Python 中的一些有用的圖像處理庫,不管你有沒有據說過、有沒有使用過,都值得試用一下並瞭解它們。
via: opensource.com/article/19/…
做者:Parul Pandey 選題:lujun9972 譯者:HankChow 校對:wxy