基本元素 - 圖檔
1、目标
加載圖檔,顯示圖檔,儲存圖檔
OpenCV函數:cv2.imread(), cv2.imshow(), cv2.imwrite()
2、教程
大部分人可能都知道電腦上的彩色圖是以RGB(紅-綠-藍,Red-Green-Blue)顔色模式顯示的,但OpenCV中彩色圖是以B-G-R通道順序存儲的,灰階圖隻有一個通道。
圖像坐标的起始點是在左上角,是以行對應的是y,列對應的是x:

3、加載圖檔
使用cv2.imread()來讀入一張圖檔:
參數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()顯示圖檔,視窗會自适應圖檔的大小:
參數1是視窗的名字,參數2是要顯示的圖檔。不同視窗之間用視窗名區分,是以視窗名相同就表示是同一個視窗,顯示結果如下:
cv2.waitKey() 是讓程式暫停的意思,參數是等待時間(毫秒ms)。時間一到,會繼續執行接下來的程式,傳入0的話表示一直等待。等待期間也可以擷取使用者的按鍵輸入:k = cv2.waitKey(0)。(小練習1
http://t.cn/EqnT18R)
我們也可以先用cv2.namedWindow()建立一個視窗,之後再顯示圖檔:
參數1依舊是視窗的名字,參數2預設是cv2.WINDOW_AUTOSIZE,表示視窗大小自适應圖檔,也可以設定為cv2.WINDOW_NORMAL,表示視窗大小可調整。圖檔比較大的時候,可以考慮用後者。
5、儲存圖檔
使用cv2.imwrite()儲存圖檔,參數1是包含字尾名的檔案名:
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、顯示灰階圖
結果如下:
2、顯示彩色圖
OpenCV中的圖像是以BGR的通道順序存儲的,但Matplotlib是以RGB模式顯示的,是以直接在Matplotlib中顯示OpenCV圖像會出現問題,是以需要轉換一下:
img[:,:,0]表示圖檔的藍色通道,img[:,:,::-1]就表示BGR翻轉,變成RGB,下面解釋下:
熟悉Python的童鞋應該知道,對一個字元串s翻轉可以這樣寫:s[::-1],’abc’變成’cba’,-1表示逆序。圖檔是二維的,是以完整地複制一副圖像就是:
而圖檔是有三個通道,相當于一個長度為3的字元串,是以通道翻轉與圖檔複制組合起來便是img[:,:,::-1]。
3、加載和保留圖檔
不使用OpenCV,Matplotlib也可以加載和儲存圖檔:
http://t.cn/Eqm3e8e
Matplotlib官網