OpenCV-載入和保存圖片

  • 2019 年 11 月 12 日
  • 筆記

OpenCV中有很方便的載入保存圖片的函數,這裡總結一下,通過本小節你可以學到下面三個函數:

  1. cv.imread(),載入圖片;
  2. cv.imshow(),顯示圖片;
  3. 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是一個整數類型,既然是整數類型,無非就是:

  1. >0,表示影像顯示多長時間,單位為ms,過了delay數個ms後,窗口自動關閉;
  2. <0,表示只有鍵盤輸入才能結束窗口,否則不會關閉窗口;
  3. =0,表示只有鍵盤輸入才能結束窗口,否則不會關閉窗口;

其實還是很簡單的,注意waitKey函數還有返回值。從上面可以看出,delay分成兩種情況:

  1. >0,此時的返回值必為-1;
  2. ≤ 0,此時返回值為輸入鍵盤對應的值,在電腦中每一個鍵盤都會對應著一個值,比如"Esc"對應著數字27。因此當我們delay設置為 ≤0 的時候,按下"Esc"鍵,waitKey()將返回整數27。

顯示效果:

當按下"Esc"的時候,控制台會列印27。

03

cv.imwrite()

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

打開beauty.jpg圖片:

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

Tags: