天天看點

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

基本元素 - 圖檔

1、目标

加載圖檔,顯示圖檔,儲存圖檔

OpenCV函數:cv2.imread(), cv2.imshow(), cv2.imwrite()

2、教程

大部分人可能都知道電腦上的彩色圖是以RGB(紅-綠-藍,Red-Green-Blue)顔色模式顯示的,但OpenCV中彩色圖是以B-G-R通道順序存儲的,灰階圖隻有一個通道。

圖像坐标的起始點是在左上角,是以行對應的是y,列對應的是x:

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

3、加載圖檔

使用cv2.imread()來讀入一張圖檔:

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

參數1:圖檔的檔案名

如果圖檔放在目前檔案夾下,直接寫檔案名就行了,如lena.jpg

否則需要給出絕對路徑,如D:OpenCVSampleslena.jpg

參數2:讀入方式,省略即采用預設值

cv2.IMREAD_COLOR:彩色圖,預設值(1)

cv2.IMREAD_GRAYSCALE:灰階圖(0)

cv2.IMREAD_UNCHANGED:包含透明通道的彩色圖(-1)

經驗之談:路徑中不能有中文噢,并且沒有加載成功的話是不會報錯的,print(img)的結果為None,後面處理才會報錯,算是個小坑。

4、顯示圖檔

使用cv2.imshow()顯示圖檔,視窗會自适應圖檔的大小:

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

參數1是視窗的名字,參數2是要顯示的圖檔。不同視窗之間用視窗名區分,是以視窗名相同就表示是同一個視窗,顯示結果如下:

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

cv2.waitKey() 是讓程式暫停的意思,參數是等待時間(毫秒ms)。時間一到,會繼續執行接下來的程式,傳入0的話表示一直等待。等待期間也可以擷取使用者的按鍵輸入:k = cv2.waitKey(0)。(小練習1

http://t.cn/EqnT18R

我們也可以先用cv2.namedWindow()建立一個視窗,之後再顯示圖檔:

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

參數1依舊是視窗的名字,參數2預設是cv2.WINDOW_AUTOSIZE,表示視窗大小自适應圖檔,也可以設定為cv2.WINDOW_NORMAL,表示視窗大小可調整。圖檔比較大的時候,可以考慮用後者。

5、儲存圖檔

使用cv2.imwrite()儲存圖檔,參數1是包含字尾名的檔案名:

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

Nice,是不是很簡單呐,再接再厲噢(●’◡’●)

6、小結

cv2.imread()讀入圖檔、cv2.imshow()顯示圖檔、cv2.imwrite()儲存圖檔。

7、練習

打開lena.jpg并顯示,如果按下’s’,就儲存圖檔為’lena_save.bmp’,否則就結束程式。

Matplotlib是Python中常用的一個繪圖庫,請學習番外篇:Matplotlib顯示圖像。

引用

本節源碼

http://t.cn/EqmQULT

Getting Started with Images

http://t.cn/EqmQJq4

番外2 Matplotlib 顯示圖像

學習如何使用Matplotlib顯示OpenCV圖像。

Matplotlib是Python的一個很常用的繪圖庫,有興趣的可以去官網(

https://matplotlib.org

)學習更多内容。

1、顯示灰階圖

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

結果如下:

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

2、顯示彩色圖

OpenCV中的圖像是以BGR的通道順序存儲的,但Matplotlib是以RGB模式顯示的,是以直接在Matplotlib中顯示OpenCV圖像會出現問題,是以需要轉換一下:

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

img[:,:,0]表示圖檔的藍色通道,img[:,:,::-1]就表示BGR翻轉,變成RGB,下面解釋下:

熟悉Python的童鞋應該知道,對一個字元串s翻轉可以這樣寫:s[::-1],’abc’變成’cba’,-1表示逆序。圖檔是二維的,是以完整地複制一副圖像就是:

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

而圖檔是有三個通道,相當于一個長度為3的字元串,是以通道翻轉與圖檔複制組合起來便是img[:,:,::-1]。

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔

3、加載和保留圖檔

不使用OpenCV,Matplotlib也可以加載和儲存圖檔:

【視覺與圖像】Python+OpenCV 教程2:基本元素-圖檔
http://t.cn/Eqm3e8e

Matplotlib官網

繼續閱讀