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