一提到數字圖像處理編程,可能大多數人就會想到matlab,但matlab也有自身的缺點:python
一、不開源,價格貴linux
二、軟件容量大。通常3G以上,高版本甚至達5G以上。c++
三、只能作研究,不易轉化成軟件。編程
所以,咱們這裏使用python這個腳本語言來進行數字圖像處理。windows
要使用python,必須先安裝python,通常是2.7版本以上,不論是在windows系統,仍是linux系統,安裝都是很是簡單的。數組
要使用python進行各類開發和科學計算,還須要安裝對應的包。這和matlab很是類似,只是matlab裏面叫工具箱(toolbox),而python裏面叫庫或包。基於python腳本語言開發的數字圖片處理包,其實不少,好比PIL,Pillow, opencv, scikit-image等。python2.7
對比這些包,PIL和Pillow只提供最基礎的數字圖像處理,功能有限;opencv其實是一個c++庫,只是提供了python接口,更新速度很是慢。到如今python都發展到了3.5版本,而opencv只支持到python 2.7版本;scikit-image是基於scipy的一款圖像處理包,它將圖片做爲numpy數組進行處理,正好與matlab同樣,所以,咱們最終選擇scikit-image進行數字圖像處理。編輯器
1、須要的安裝包函數
由於scikit-image是基於scipy進行運算的,所以安裝numpy和scipy是確定的。要進行圖片的顯示,還須要安裝matplotlib包,綜合起來,須要的包有:工具
Python >= 2.6 Numpy >= 1.6.1 Cython >= 0.21 Six >=1.4 SciPy >=0.9 Matplotlib >= 1.1.0 NetworkX >= 1.8 Pillow >= 1.7.8 dask[array] >= 0.5.0
比較,安裝起來很是費事,尤爲是scipy,在windows上基本安裝不上。
可是不用怕,咱們選擇一款集成安裝環境就好了,在此推薦Anaconda, 它把以上須要的包都集成在了一塊兒,所以咱們實際上從頭至尾只須要安裝Anaconda軟件就好了,其它什麼都不用裝。
2、下載並安裝 anaconda
先到https://www.continuum.io/downloads 下載anaconda, 如今的版本有python2.7版本和python3.5版本,下載好對應版本、對應系統的anaconda,它其實是一個sh腳本文件,大約280M左右。
本系列以windows7+python3.5爲例,所以咱們下載以下圖紅框裏的版本:
名稱爲: Anaconda3-2.4.1-Windows-x86_64.exe
是一個可執行的exe文件,下載完成好,直接雙擊就能夠安裝了。
在安裝的時候,假設咱們安裝在D盤根目錄,如:
而且將兩個選項都選上,將安裝路徑寫入環境變量。
而後等待安裝完成就能夠了。
安裝完成後,打開windows的命令提示符:
輸入conda list 就能夠查詢如今安裝了哪些庫,經常使用的numpy, scipy名列其中。若是你還有什麼包沒有安裝上,能夠運行
conda install *** 來進行安裝。(***爲須要的包的名稱)
若是某個包版本不是最新的,運行 conda update *** 就能夠更新了。
3、簡單測試
anaconda自帶了一款編輯器spyder,咱們之後就能夠用這款編輯器來編寫代碼。
spyder.exe放在安裝目錄下的Scripts裏面,如個人是 D:/Anaconda3/Scripts/spyder.exe, 直接雙擊就能運行。咱們能夠右鍵發送到桌面快捷方式,之後運行就比較方便了。
咱們簡單編寫一個程序來測試一下安裝是否成功,該程序用來打開一張圖片並顯示。首先準備一張圖片,而後打開spyder,編寫以下代碼:
from skimage import io img=io.imread('d:/dog.jpg') io.imshow(img)
將其中的d:/dog.jpg 改爲你的圖片位置
而後點擊上面工具欄裏的綠色三角進行運行,最終顯示
若是右下角「 Ipython console" 能顯示出圖片,說明咱們的運行環境安裝成功。
咱們能夠選擇右上角的 」 variable explorer" 來查看圖片信息,如
咱們能夠把這個程序保存起來,注意python腳本文件的後綴名爲py.
4、skimage包的子模塊
skimage包的全稱是scikit-image SciKit (toolkit for SciPy) ,它對scipy.ndimage進行了擴展,提供了更多的圖片處理功能。它是由python語言編寫的,由scipy 社區開發和維護。skimage包由許多的子模塊組成,各個子模塊提供不一樣的功能。主要子模塊列表以下:
子模塊名稱 | 主要實現功能 |
io | 讀取、保存和顯示圖片或視頻 |
data | 提供一些測試圖片和樣本數據 |
color | 顏色空間變換 |
filters | 圖像加強、邊緣檢測、排序濾波器、自動閾值等 |
draw | 操做於numpy數組上的基本圖形繪製,包括線條、矩形、圓和文本等 |
transform | 幾何變換或其它變換,如旋轉、拉伸和拉東變換等 |
morphology | 形態學操做,如開閉運算、骨架提取等 |
exposure | 圖片強度調整,如亮度調整、直方圖均衡等 |
feature | 特徵檢測與提取等 |
measure | 圖像屬性的測量,如類似性或等高線等 |
segmentation | 圖像分割 |
restoration | 圖像恢復 |
util | 通用函數 |
用到一些圖片處理的操做函數時,須要導入對應的子模塊,若是須要導入多個子模塊,則用逗號隔開,如:
from skimage import io,data,color