OpenCV-載入和保存圖片
- 2019 年 11 月 12 日
- 筆記
OpenCV中有很方便的載入保存圖片的函數,這裡總結一下,通過本小節你可以學到下面三個函數:
- cv.imread(),載入圖片;
- cv.imshow(),顯示圖片;
- cv.imwriter(),保存圖片;
首先準備一張圖片,命名為「my_love.jpg」

01
cv.imread()
使用cv.imread()函數載入圖片非常簡單,只需要指定對應的圖片路徑即可,此時需要注意的是cv.imread()函數返回的是ndarray數組類型,即通過ndarray數組表示的像素點。

輸出結果:
<class 'numpy.ndarray'>
通過圖片文件路徑載入圖片將圖片轉換為ndarray數組,此時我們就可以通過獲取ndarray數組屬性來得到圖片資訊。下面構造獲取圖片資訊的函數:

完整的程式碼:

輸出結果:
<class 'numpy.ndarray'>影像類型: <class 'numpy.ndarray'>影像長*寬*通道數: (640, 640, 3)影像長寬通道數相乘所得值,所有像素點個數: 1228800影像像素值類型: uint8
02
cv.imshow()
上一小節介紹了cv.imread()將指定路徑中的圖片文件載入,OpenCV將圖片轉換成了ndarray數組,其中數組中的每一個元素都表示圖片中的一個像素點,有時候我們需要將載入進來的圖片(此時是ndarray數組)顯示出來。

但是當你執行這段程式碼的時候,螢幕會一閃而過,此時我們需要使用waitKey函數,注意此時waitKey函數在影像和影片中應用含義是不一樣的,下面先以影像角度來介紹waitKey函數,後面介紹影片讀寫的時候在介紹在影片中應用waitKey函數的含義。具體的函數定義如下:

delay延遲的意思,delay是一個整數類型,既然是整數類型,無非就是:
- >0,表示影像顯示多長時間,單位為ms,過了delay數個ms後,窗口自動關閉;
- <0,表示只有鍵盤輸入才能結束窗口,否則不會關閉窗口;
- =0,表示只有鍵盤輸入才能結束窗口,否則不會關閉窗口;
其實還是很簡單的,注意waitKey函數還有返回值。從上面可以看出,delay分成兩種情況:
- >0,此時的返回值必為-1;
- ≤ 0,此時返回值為輸入鍵盤對應的值,在電腦中每一個鍵盤都會對應著一個值,比如"Esc"對應著數字27。因此當我們delay設置為 ≤0 的時候,按下"Esc"鍵,waitKey()將返回整數27。

顯示效果:

當按下"Esc"的時候,控制台會列印27。
03
cv.imwrite()
使用cv.imwrite()函數保存處理後的圖片,和載入圖片一樣簡單。我們直接使用即可,為了效果明顯,這裡使用cv.cvtColor()函數,你可以簡單理解成對影像做顏色上的變換,第一參數為ndarray數組圖片,第二個參數就是指定圖片做何種變換,裡面還有其他的一些屬性可以嘗試。

打開beauty.jpg圖片:

接下來做一個簡單的總結:


