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