Python OpenCV 圖像處理 :讀取,顯示與儲存圖片

應用篇

今天要來介紹的是OpenCV這個Library。在做圖像處理的時候我們經常會用到這個Library。今天我們會學到讀取圖像檔案的方法,顯示圖像的方法,以及儲存圖像的方法。在這邊我們會利用三個函數:cv2.imread(), cv2.imshow(), cv2.imwrite()。

讀取圖片

在讀取圖片的時候我們會用到cv2.imread()這個函數。當圖片檔案位置和你的程式代碼位置相同時只要指定圖片檔案名稱,如果並非這樣的場合的話就要指定圖片檔案的絕對位置(path)才能讀取圖片。

cv2.imread之中有兩個參數,分別是cv2.imread(filename, flags=None,)。第一個要輸入的是圖片的檔案名稱,也就是剛剛說的絕對位置(path),第二個參數是指定要以「彩色」,「黑白」還是「Alpha合成」的方式來讀取圖片。第二個參數的彩色,黑白,Alpha合成分別可以以1, 0, -1來指定。

另外,第二個參數也可以用下面的方式來指定。

  • cv2.IMREAD_COLOR : 以彩色圖片來讀取。會忽視圖片的透明度。
  • cv2.IMREAD_GRAYSCALE : 以黑白圖片來讀取。
  • cv2.IMREAD_UNCHANGED : 以Alpha合成來讀取圖片。

接著我們來看看範例的代碼。

import numpy as np
import cv2

#以黑白圖像讀取
img = cv2.imread('image.png', 0)

使用上面的代碼就可以以黑白圖像來讀取圖片。我們待會會使用下面的圖片來做練習。

注意:即使圖片的path不對也不會出現任何的Error,但是如果執行print img的話會顯示None。

image.png

顯示圖片

在顯示圖片的時候我們會用到cv2.imshow()函數。cv2.imshow()同樣也有兩個參數。第一個參數可以指定視窗的名稱,第二個參數是指定想要顯示的圖片。跟上面的代碼結合起來就會變成下面這樣。

import numpy as np
import cv2

#以黑白圖像讀取
img = cv2.imread('image.png', 0)

cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

執行了上面的程式後會有下面的圖片出現。

因為我們是以黑白圖片來讀取的,所以剛剛的彩色照片會變成黑白照片。

cv2.waitKey()是處理鍵盤輸入的函數。裡面的參數是「指定輸入等待時間(毫秒)」。例如當參數的數字為100時,你就會有100毫秒的時間可以輸入文字,經過100毫秒之後程式就會繼續執行。另外當參數設定為0的時候,會無限期地等待著任何一個按鍵被輸入,之後才會繼續執行。

cv2.destroyAllWindows()則是將所有視窗都關閉的函數。

儲存圖片

儲存圖片時我們會用到cv2.imwrite()這個函數。這個函數也有兩個參數,第一個參事是指定圖片檔案名稱,第二個是指定想要儲存的圖片。

import numpy as np
import cv2

img = cv2.imread('image.png', 0)
cv2.imwrite('image.jpg', img)

只要執行上面的程式之後,我們可以將原本是彩色的png檔案儲存為黑白的jpg檔案。

進階

剛剛介紹到的cv2.waitKey()除了可以指定秒數以外,我們還可以指定按了哪個鍵之後再繼續執行之後的動作。例如我們按了空白鍵之後關閉視窗,按了’s’這個字的話就儲存圖片再關閉視窗的代碼會像下面這樣。

import numpy as np
import cv2

img = cv2.imread('image.png', 0)
cv2.imshow('image', img)

key = cv2.waitKey(0)

# 按空白鍵
if key == 32:   # ASCII Code
  cv2.destroyAllWindows()
# 按's'
elif key == ord('s'):
  cv2.imwrite('image.jpg', img)
  cv2.destroyAllWindows()

這邊代碼中的 key == 32的部分是使用了在寫程式的時候常用到的ASCII Code。如果有興趣的人可以去查查看。這邊32剛剛好對應到的是空白鍵。

留言