介紹
如今的世界存在了大量的數(shù)據(jù),圖像數(shù)據(jù)是重要的組成部分。如果要利用這些圖片,需要對圖像進行處理,提高圖片質(zhì)量或提取圖片內(nèi)容信息。
圖像處理的常見操作包括圖像顯示,基本操作如裁剪,翻轉(zhuǎn),旋轉(zhuǎn)等,圖像分割,分類和特征提取,圖像恢復和圖像識別。Python是圖像處理的合適選擇,因為它作為一種科學編程語言日益普及,并且提供了許多免費實用的圖像處理工具。
下面將介紹10個用于圖像處理的python庫,它們在處理圖像等方面都提供了簡單方便的方法。
1. scikit Image
scikit-image(https://scikit-image.org/)是一個與numpy一起使用的開源Python工具。它實現(xiàn)了用于研究,教育和行業(yè)應用的算法和實用程序。即使是剛接觸Python的人也可以輕松使用。它的代碼由活躍的志愿者編寫,由高質(zhì)量的同行進行評審。
資源
有完善的文檔和豐富的示例(http://scikit-image.org/docs/stable/user_guide.html)。
示例
導入skimage,大多數(shù)函數(shù)都在它的子模塊中。下面是一些 skimage 的例子:
圖像過濾
import matplotlib.pyplot as plt
%matplotlib inline
from skimage import data,filters
image = data.coins()
# ... 或者其他的 Numpy 數(shù)組
edges = filters.sobel(image)
plt.imshow(edges, cmap='gray')
使用match_template函數(shù)進行模板匹配
在gallery中有更多例子。
2. Numpy
Numpy是Python的核心庫之一,它為數(shù)組提供了支持。一個圖像本質(zhì)上是包含像素數(shù)據(jù)的標準Numpy數(shù)組。因此,通過使用基本的Numpy操作,例如切片,掩膜(mask)和花式索引(fancy indexi)等直接修改圖像的像素值?梢允褂胹kimage加載圖像并用matplotlib顯示。
資源
Numpy的官方文檔提供了完整的文檔和資源列表(http://www.numpy.org/)。
示例
使用Numpy對圖像進行掩膜操作。
import numpy as np
from skimage import data
import matplotlib.pyplot as plt
%matplotlib inline
image = data.camera()
type(image)
numpy.ndarray #圖像是一個numpy數(shù)組
mask = image < 87
image[mask]=255
plt.imshow(image, cmap='gray')
3. Scipy
scipy是一個類似Numpy的核心科學計算模塊,可用于基本的圖像處理任務。特別是子模塊scipy.ndimage提供了操作n維Numpy數(shù)組的函數(shù)。該軟件包目前包括線性、非線性濾波,二值形態(tài)(binary morphology),B樣條插值(B-spline interpolatio)和對象測量(object measurements)等功能。
資源
scipy.ndimage的完整函數(shù)列表:https://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html#correlation-and-convolution
示例
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>)
4. PIL / Pillow
PIL(Python Imaging Library)是一個免費的Python函數(shù)庫,它增加了打開、操作和保存多種不同圖像格式的支持。然而,它已經(jīng)停止了開發(fā),最后一次發(fā)布是2009年。幸運的是,PIL有一個活躍的分支Pillow,它更易于安裝,支持所有主要的操作系統(tǒng)并支持Python 3。該庫包含了基本的圖像處理功能,包括像素操作,使用內(nèi)置卷積內(nèi)核進行過濾以及顏色空間轉(zhuǎn)換。
資源
該文檔包含了安裝指引以及每個模塊的示例。
示例
使用Pillow中的ImageFilter增強圖像:
from PIL import Image, ImageFilter
#讀入圖像
im = Image.open( 'image.jpg' )
#顯示圖像
im.show()
from PIL import ImageEnhance
enh = ImageEnhance.Contrast(im)
enh.enhance(1.8).show("30% more contrast")
5. OpenCV-Python
OpenCV(Open Source Computer Vision Library)是視覺應用中使用最廣的庫之一。OpenCV-Python是OpenCV的python API。OpenCV-Python不僅速度快,因為后臺使用C/C++編寫,而且易于編碼和部署(由于前端的Python包裝器)。這使其成為執(zhí)行計算密集型視覺程序的絕佳選擇。
資源
OpenCV2-Python-Guide使你更容易上手OpenCV-Python。
示例
下面的示例是使用OpenCV-Python的金字塔融合創(chuàng)建名為'Orapple'的新水果的功能。
6. SimpleCV
SimpleCV也是一個構建視覺應用的開源框架。有了它,您可以使用如OpenCV等幾個高性能的計算機視覺庫,不需要了解位深度,文件格式,色彩空間等概念。學習難度遠遠小于OpenCV,并且正如他們的標語所說,“它使計算機視覺變得簡單”。SimpleCV的其他優(yōu)點還有:
初學者也可以編寫簡單的機器視覺測試
攝像機,視頻文件,圖像和視頻流可以相互操作
資源
官方文檔簡單易懂,還有大量的案例參考。
示例
7. Mahotas
Mahotas是另一個Python計算機視覺和圖像處理庫。它包含了傳統(tǒng)的圖像處理功能,如過濾和形態(tài)學操作,以及用于特征計算的計算機視覺功能,包括興趣點檢測和局部描述符。該接口使用Python,可以快速開發(fā),算法使用C++實現(xiàn),并且針對速度進行了優(yōu)化。Mahotas庫具有盡量少的代碼甚至最小的依賴。閱讀他們的{官方文章](https://openresearchsoftware.metajnl.com/articles/10.5334/jors.ac/)獲取更多信息。
資源
該文檔包含了安裝說明,示例和教程,幫助你輕松地使用mahotas。
示例
Mahotas盡量使用簡單的代碼實現(xiàn)功能。例如“Finding Wally”問題,Mahotas使用最少的代碼實現(xiàn)了較好的結果。這里是它的源代碼。
8. SimpleITK
ITK(Insight Segmentation and Registration Toolkit)是一個開源的跨平臺系統(tǒng),為開發(fā)人員提供了一整套用于圖像分析的軟件工具。其中,SimpleITK是一個基于ITK的簡化層,旨在促進快速原型設計,教育,解釋語言中的使用。SimpleITK是一個圖像分析工具包,具有大量的組件,支持過濾操作,圖像分割和配準。SimpleITK使用C++編寫,也可以用于包括Python在內(nèi)的大量編程語言。
資源
有許多Jupyter Notebooks展示了SimpleITK在教育和研究中的使用。使用SimpleITK進行Python和R編程語言的交互式圖像分析。
示例
下面是使用SimpleITK和Python實現(xiàn)的CT/MR配準過程的可視化。源代碼。
9. pgmagick
pgmagick是使用Python包裝的GraphicsMagick庫。GraphicsMagick有時被稱為圖像處理中的瑞士軍刀。它提供了強大高效的工具和庫集合,支持超過88種主要圖像格式的讀取,寫入和操作,包括DPX,GIF,JPEG,JPEG-2000,PNG,PDF,PNM和TIFF等重要格式。
資源
Github倉庫,有安裝和要求說明,詳細的用戶指南。
示例
一些使用 pgmagick 的圖像操作:
圖像縮放:
邊緣提取:
10. Pycairo
Pycairo是cairo圖形庫的一組python綁定。Cairo是一個繪制矢量圖形的2D圖形庫。矢量圖形在調(diào)整大小或變換時不會丟失清晰度。Pycairo可使用Python調(diào)用cairo命令。
資源
Pycairo GitHub倉庫有安裝和使用的詳細說明。以及Pycairo的簡要教程。
示例
使用Pycairo繪制線段,基本形狀和徑向漸變(radial gradients)。