天天看點

python基本圖像操作Python基本圖像操作

與早期計算機視覺領域多數程式都是由 c/c++ 寫就的情形不同。随着計算機硬體速度越來越快,研究者在考慮選擇實作算法語言的時候會更多地考慮編寫代碼的效率和易用性,而不是像早年那樣把算法的執行效率放在首位。這直接導緻近年來越來越多的研究者選擇 python 來實作算法。

今天在計算機視覺領域,越來越多的研究者使用 python 開展研究,是以有必要去學習一下十分易用的python在圖像處理領域的使用,這篇部落格将會介紹如何使用python的幾個著名的圖像處理庫完成最基本的圖像操作與處理。

pil(python imaging library python,圖像處理類庫)提供了通用的圖像處理功能,以及大量有用的基本圖像操作,比如圖像縮放、裁剪、旋轉、顔色轉換等。

利用 pil 中的函數,我們可以從大多數圖像格式的檔案中讀取資料,然後寫入最常見的圖像格式檔案中。pil 中最重要的子產品為 image 。

下面這個程式我使用pil讀取一張jpg圖檔将其灰階化之後存為一個png檔案:

test.jpg

python基本圖像操作Python基本圖像操作

test.png

python基本圖像操作Python基本圖像操作
python基本圖像操作Python基本圖像操作
python基本圖像操作Python基本圖像操作
python基本圖像操作Python基本圖像操作

元組的使用中,坐标原點為左上角,區域劃分如下圖所示

python基本圖像操作Python基本圖像操作

我們處理數學運算、繪制圖表,或者在圖像上繪制點、直線和曲線時, matplotlib是個很好的類庫,具有比 pil 更強大的繪圖功能。matplotlib 可以繪制出較好的條形圖、餅狀圖、散點圖等,但是對于大多數計算機視覺應用來說,僅僅需要用到幾個繪圖指令。比如,我們想用點和線來表示一些事物,比如興趣點、對應點以及檢測出的物體。

show() 指令首先打開圖形使用者界面(gui),然後建立一個圖像視窗。該圖形使用者界面會循環阻斷腳本,然後暫停,直到最後一個圖像視窗關閉。在每個腳本裡,你隻能調用一次 show() 指令,而且通常是在腳本的結尾調用。

也可以使用axis(‘off’)指令使坐标軸不顯示。

運作結果

python基本圖像操作Python基本圖像操作

在繪圖時,有很多選項可以控制圖像的顔色和樣式。

如:

标記

顔色

‘b’

藍色

‘g’

綠色

‘r’

紅色

‘c’

青色

‘m’

品紅

‘y’

黃色

‘k’

黑色

‘w’

白色

線型

‘-‘

實線

‘–’

虛線

‘:’

點線

形狀

‘.’

‘o’

圓圈

’s’

正方形

‘*’

星形

‘+’

加号

‘x’

叉号

繪制圖像的輪廓(或者其他二維函數的等輪廓線)在工作中非常有用。因為繪制輪廓需要對每個坐标 [x, y] 的像素值施加同一個門檻值,是以首先需要将圖像灰階化,之後使用contour獲得輪廓圖像

python基本圖像操作Python基本圖像操作

圖像的直方圖用來表征該圖像像素值的分布情況。用一定數目的小區間(bin)來指定表征像素值的範圍,每個小區間會得到落入該小區間表示範圍的像素數目。(灰階)圖像的直方圖可以使用 hist() 函數繪制:

hist() 函數的第二個參數指定小區間的數目。需要注意的是,因為 hist() 隻接受一維數組作為輸入,是以我們在繪制圖像直方圖之前,必須先對圖像進行壓平處理。flatten() 方法将任意數組按照行優先準則轉換成一維數組。

python基本圖像操作Python基本圖像操作

pylab 庫中的 ginput() 函數可以實作互動式标注,用來标記一些點或者是一些訓練資料。

上面的腳本首先繪制一幅圖像,然後等待使用者在繪圖視窗的圖像區域點選三次。程

序将這些點選的坐标 [x, y] 自動儲存在 x 清單裡。

本篇部落格介紹了一些python基本的圖像操作,除了上述的pil和matplotlib,還經常會使用numpy直接操作圖像數組來達到操作圖像的目的,使用scipy完成更多更複雜的計算,我會把我的學習過程記錄下來,希望對大家有所幫助~

繼續閱讀