Python十大工具,讓圖像簡(jiǎn)潔直觀有魅力
如今,數(shù)據(jù)遍布各個(gè)角落,圖像則是數(shù)據(jù)的重要組成部分。但圖像無(wú)論有何用途,都要經(jīng)過(guò)處理。因此,圖像處理就是對(duì)數(shù)字圖像進(jìn)行分析、操作的過(guò)程,其主要目的是為改善圖像質(zhì)量或從中提取一些有用信息。
圖像處理的常見任務(wù)包括圖像顯示、圖像基本操作(裁剪、翻轉(zhuǎn)、旋轉(zhuǎn)等)、圖像分割、分類及特征提取、圖像修復(fù)和圖像識(shí)別。而Python作為一種科學(xué)編程語(yǔ)言已在日漸普及,在生態(tài)系統(tǒng)庫(kù)中還免費(fèi)提供了許多最為先進(jìn)的圖像處理工具,因此成為了圖像處理的最佳選擇。
圖片來(lái)源:Luriko Yamaguchi/Pexels
下面將介紹一些可用于圖像處理的常用Python庫(kù)。
1. scikit Image
scikit-image是Python的一個(gè)開源包,將圖片作為numpy數(shù)組進(jìn)行處理。它使算法和實(shí)用程序得以用于研究、教育和行業(yè)應(yīng)用領(lǐng)域。即便是對(duì)不熟悉Python生態(tài)環(huán)境的人來(lái)說(shuō),這個(gè)庫(kù)也十分簡(jiǎn)單明了。此代碼由一個(gè)活躍的志愿者團(tuán)隊(duì)編寫,質(zhì)量很高且已經(jīng)審閱。
資源:http://scikit-image.org/docs/stable/user_guide.html
用法:該包作為skimage導(dǎo)入,大多數(shù)功能都可在子模塊找到。例如:
(1) 圖像過(guò)濾
- 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')
(2) 使用match_template函數(shù)進(jìn)行模板匹配
更多示例傳送門:https://scikit-image.org/docs/dev/auto_examples
2. Numpy
Numpy是Python編程的一個(gè)核心庫(kù),為數(shù)組提供支持。圖像本質(zhì)上是包含數(shù)據(jù)像素點(diǎn)的標(biāo)準(zhǔn)Numpy數(shù)組。因此,通過(guò)使用基本的NumPy操作,例如切片、掩膜和匹配索引,可以修改圖像的像素值。也可以用skimage加載圖像,用matplotlib顯示圖像。
資源:http://www.numpy.org/
用處:使用Numpy來(lái)實(shí)現(xiàn)圖像掩膜。
- import numpy as npfrom skimage import dataimport matplotlib.pyplot as plt %matplotlib inline
- image = data.camera()type(image)
- numpy.ndarray #Image is a numpy array
- mask = image < 87image[mask]=255plt.imshow(image, cmap='gray')
3. Scipy
和Numpy一樣,scipy是Python的另一個(gè)核心模塊,可用于圖像的基本處理和加工。 特別是子模塊scipy.ndimage提供了可在n維NumPy數(shù)組上運(yùn)行的函數(shù)。該包目前包括線性和非線性濾波法、二值圖像形態(tài)學(xué)、B樣條插值和對(duì)象測(cè)量等功能。
資源:
https://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html#correlation-and-convolution
用處:
使用SciPy的高斯濾波對(duì)圖片進(jìn)行模糊處理:
- from scipy import misc,ndimage
- face = misc.face()blurred_face = ndimage.gaussian_filter(face, sigma=3)very_blurred = ndimage.gaussian_filter(face, sigma=5)
- #Resultsplt.imshow(<image to be displayed>)
4. PIL/ Pillow
PIL(Python圖像處理庫(kù))是一個(gè)免費(fèi)的Python編程語(yǔ)言庫(kù),支持打開、處理和保存多種格式的圖像文件。但它的發(fā)展早已停滯不前,最新一次發(fā)布還是在2009年。所幸還有Pillow這個(gè)積極開發(fā)的PIL分支,而且它安裝起來(lái)更容易,還可以在所有主操作系統(tǒng)上運(yùn)行,并支持Python 3。該庫(kù)包含點(diǎn)操作、使用一組內(nèi)置卷積內(nèi)核進(jìn)行圖像過(guò)濾以及顏色空間轉(zhuǎn)換這些基本的圖像處理功能。
資源:https://pillow.readthedocs.io/en/3.1.x/index.html
用處:使用Pillow中的ImageFilter增強(qiáng)圖像:
- from PIL import Image, ImageFilter#Read imageim = Image.open( 'image.jpg' )#Display imageim.show()
- from PIL import ImageEnhanceImageEnhanceenh = ImageEnhance.Contrast(im)enh.enhance(1.8).show("30% more contrast")
更多資源傳送門:http://sipi.usc.edu/database/
5. OpenCV-Python
OpenCV(開源計(jì)算機(jī)視覺(jué)庫(kù))是計(jì)算機(jī)視覺(jué)應(yīng)用中使用最為廣泛的庫(kù)之一。OpenCV-Python是OpenCV的python接口。OpenCV-Python不只是因?yàn)楹笈_(tái)由用C / C ++編寫的代碼組成而速度快,還因?yàn)榍岸说腜ython包裝器使得編碼和部署容易。因此,它成為了計(jì)算密集型計(jì)算機(jī)視覺(jué)程序的絕佳選擇。
資源:https://github.com/abidrahmank/OpenCV2-Python-Tutorials
用處:下圖中,OpenCV-Python在圖像融合中使用圖像金字塔創(chuàng)建了一個(gè)名為‘Orapple’的新型水果。
代碼傳送門:
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_pyramids/py_pyramids.html#pyramids
6. SimpleCV
SimpleCV也是用于構(gòu)建計(jì)算機(jī)視覺(jué)應(yīng)用程序的一個(gè)開源框架。使用SimpleCV,可以不必事先了解位深、文件格式、色彩空間就能對(duì)幾個(gè)高性能的計(jì)算機(jī)視覺(jué)庫(kù)如OpenCV 進(jìn)行訪問(wèn)。它的學(xué)習(xí)曲線比OpenCV小得多,正如其宣傳語(yǔ)所說(shuō),“SimpleCV讓計(jì)算機(jī)視覺(jué)變得容易”。SimpleCV的優(yōu)勢(shì)在于:
- 即使是初級(jí)程序員也可以編寫簡(jiǎn)單的機(jī)器視覺(jué)測(cè)試
- 攝像頭、視頻文件、圖像和視頻流都可以互操作
資源:https://simplecv.readthedocs.io/en/latest/
用處:
7. Mahotas
Mahotas是Python中另一個(gè)計(jì)算機(jī)視覺(jué)和圖像處理庫(kù),含有過(guò)濾和形態(tài)學(xué)操作這類的傳統(tǒng)圖像處理功能和興趣點(diǎn)檢測(cè)、局部描述符等用于特征計(jì)算的現(xiàn)代化計(jì)算機(jī)視覺(jué)功能。接口使用了Python,適合快速開發(fā),但算法是由C ++實(shí)現(xiàn)的,并對(duì)速度進(jìn)行了調(diào)整。Mahotas庫(kù)因代碼簡(jiǎn)單且依賴性最小而快速。
資源:https://mahotas.readthedocs.io/en/latest/install.html
用處:Mahotas庫(kù)靠簡(jiǎn)單的代碼來(lái)完成工作。對(duì)于“尋找Wally”這一問(wèn)題,Mahotas解決得很好,且代碼最少。
源代碼傳送門:https://mahotas.readthedocs.io/en/latest/wally.html
8. SimpleITK
ITK或Insight Segmentation and Registration Toolkit是一個(gè)開源的跨平臺(tái)系統(tǒng),為開發(fā)人員提供了一整套用于圖像分析的軟件工具。其中,SimpleITK是一個(gè)建立在ITK之上的簡(jiǎn)化層,旨在方便它在快速成型、教育、解釋語(yǔ)言中的應(yīng)用。SimpleITK是一個(gè)具有大量組件的圖像分析工具包,支持一般過(guò)濾操作、圖像分割和圖像配準(zhǔn)。SimpleITK本身是用C ++編寫的,但可用于包括Python在內(nèi)的多種編程語(yǔ)言。
資源:http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/
用處:以下動(dòng)畫是使用SimpleITK和Python可視化嚴(yán)格CT / MR定位過(guò)程。
源代碼傳送門:
https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks/blob/master/Utilities/intro_animation.py
9. pgmagick
Pgmagick是GraphicsMagick庫(kù)基于Python的包裝器。GraphicsMagick圖像處理系統(tǒng)有時(shí)也被稱為圖像處理的瑞士軍刀。它提供了強(qiáng)大高效的工具集和庫(kù)集,這些集合支持讀取、寫入和操作的圖像格式超過(guò)88種,其中包括DPX,GIF,JPEG,JPEG-2000,PNG,PDF,PNM和TIFF等重要格式。
資源:
- Github存儲(chǔ)庫(kù):https://github.com/hhatto/pgmagick
- 用戶指南:https://pgmagick.readthedocs.io/en/latest/
用處:可使用pgmagick對(duì)圖像進(jìn)行的處理操作很有限,包括:
(1) 圖像縮放:
(2) 邊緣提取:
10. Pycairo
Pycairo是一組用于圖形庫(kù)cairo的python包。Cairo是一個(gè)用于繪制矢量圖形的2D圖形庫(kù)。矢量圖形很有趣,在調(diào)整大小或變換時(shí)它們的清晰度不會(huì)受到影響。Pycairo可從Python中調(diào)用cairo命令用于cairo。
資源:
- GitHub存儲(chǔ)庫(kù):https://github.com/pygobject/pycairo
- 入門指南:https://pycairo.readthedocs.io/en/latest/tutorial.html
用處:Pycairo可用于繪制線條、繪制基本形狀和徑向漸變: