目錄
目标
使用OpenCV
顯示圖像
寫入圖像
總結使用
使用Matplotlib
注:圖檔後續補充
目标
在這裡,你将了解如何使用Python程式設計語言中的OpenCV庫,實作讀取、顯示和儲存圖像的功能。具體來說,你将學習以下函數的用法:cv.imread() 用于讀取圖像,cv.imshow() 用于顯示圖像,cv.imwrite() 用于将圖像儲存到本地檔案系統中。
如果你有興趣,還可以學習如何使用Matplotlib庫來顯示圖像,這也是一種常見的圖像顯示方式。
在使用OpenCV庫讀取圖像時,需要使用cv.imread()函數。讀取圖像時,需要提供圖像檔案的路徑或檔案名,函數将傳回一個圖像對象。
使用OpenCV
除此之外,cv.imread()函數還可以接收一個額外的參數,用于指定圖像的讀取方式。具體來說,可以使用以下三個标志:
- cv.IMREAD_COLOR:用于加載彩色圖像,會忽略任何圖像的透明度,這也是預設标志;
- cv.IMREAD_GRAYSCALE:用于以灰階模式加載圖像;
- cv.IMREAD_UNCHANGED:用于加載圖像,包括alpha通道。
此外,還可以傳遞整數1、0或-1來表示這三個标志。
下面是使用cv.imread()函數讀取圖像的示例代碼:
import numpy as np
import cv2 as cv
#加載彩色灰階圖像
img = cv.imread('messi5.jpg', 0)
在這裡:0代表讀取灰階圖像,即将彩色圖像轉換為灰階圖像
另外:
- cv.IMREAD_COLOR 或 1:讀取彩色圖像,忽略 alpha 通道,相當于使用預設值 1。
- cv.IMREAD_GRAYSCALE 或 0:讀取灰階圖像。
- cv.IMREAD_UNCHANGED 或 -1:讀取原始圖像,包括 alpha 通道(如果有)。
下面為效果圖(沒有報錯代表讀取成功):
警告
如果在使用OpenCV庫讀取圖像時,提供的圖像路徑錯誤,不會引發任何錯誤,但是列印讀取的圖像對象時将傳回None。換句話說,即使圖像路徑錯誤,程式也不會崩潰或抛出異常,而是傳回一個空對象。
是以,為了確定程式能夠正确讀取圖像,建議在提供圖像路徑之前,先檢查路徑是否正确,以避免意外的錯誤。
顯示圖像
使用函數**cv.imshow()**可以在視窗中顯示圖像。該函數會自動根據圖像尺寸調整視窗大小。
在調用**cv.imshow()**函數時,第一個參數是視窗名稱,是一個字元串類型的值。第二個參數是要顯示的圖像對象。你可以建立多個視窗,并指定不同的視窗名稱,以顯示多個圖像。
import cv2 as cv
#加載彩色灰階圖像
img = cv.imread('messi5.jpg',0)
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()
視窗的螢幕截圖如下所示:

在使用OpenCV庫顯示圖像時,我們需要使用函數cv.imshow()。該函數需要一個視窗名稱作為第一個參數,并需要傳遞要顯示的圖像作為第二個參數。調用該函數後,可以使用**cv.waitKey()**函數等待使用者互動事件。
cv.waitKey()函數是一個鍵盤綁定函數,它等待指定毫秒數的時間,等待使用者按下任何鍵或互動事件發生。
如果時間到期時仍未發生互動事件,則程式将繼續執行。如果将0作為參數傳遞,則程式将無限等待使用者互動事件。該函數還可以用于檢測特定按鍵的按下事件,例如按下鍵盤上的字母a。需要注意的是,為了確定圖像能夠正确顯示,必須在顯示圖像後使用cv.waitKey()**函數。
cv.destroyAllWindows()函數可以用于銷毀我們建立的所有視窗,而cv.destroyWindow()函數可以銷毀特定的視窗。
需要注意的是,在某些情況下,可以在建立一個空的視窗之後再将圖像加載到該視窗中。這時,可以使用cv.namedWindow()**函數來設定視窗的屬性,例如是否可以調整視窗大小。如果需要顯示的圖像尺寸過大或需要在視窗中添加跟蹤欄時,可以使用該函數來設定視窗大小。
下面是使用OpenCV庫顯示圖像的示例代碼:
cv.namedWindow('image',cv.WINDOW_NORMAL)
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()
效果圖
openCV—圖像入門(python)
寫入圖像
在使用OpenCV庫儲存圖像時,需要使用函數cv.imwrite()。該函數需要兩個參數:第一個參數是要儲存的檔案名,第二個參數是要儲存的圖像對象。
具體來說,你可以像這樣調用cv.imwrite()函數:cv.imwrite('messigray.png',img)。這将會把圖像以PNG格式儲存在工作目錄中,檔案名為'messigray.png'。
需要注意的是,cv.imwrite()函數可以儲存多種不同格式的圖像,例如PNG、JPEG、BMP等。在調用該函數時,需要根據需要指定要儲存的圖像格式,即檔案擴充名。
總結使用
下面的代碼示範了如何使用OpenCV庫加載、顯示和儲存圖像。具體來說,它加載一張灰階圖像,将其顯示在螢幕上,等待使用者按下鍵盤按鍵。如果使用者按下's'鍵,則程式将儲存圖像到本地,并退出;如果使用者按下'ESC'鍵,則程式将直接退出而不儲存圖像。
import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg',0)
cv.imshow('image',img)
k = cv.waitKey(0)
if k == 27: # 等待ESC退出
cv.destroyAllWindows()
elif k == ord('s'): # 等待關鍵字,儲存和退出
cv.imwrite('messigray.png',img)
cv.destroyAllWindows()
警告
如果使用的是64位計算機,則必須k = cv.waitKey(0)按如下所示修改行:k = cv.waitKey(0) & 0xFF。
這是因為在64位計算機上,**cv.waitKey()**函數傳回一個64位整數,但是ASCII碼值隻有8位。是以,将傳回值與0xFF(即255)進行按位與運算,可以保留傳回值的低8位,這是ASCII碼的有效範圍。
這種修改可以確定在64位計算機上正确讀取鍵盤輸入,并避免潛在的相容性問題。
使用Matplotlib
Matplotlib是一款Python的繪圖庫,可以提供多種繪圖方法,友善進行資料可視化和圖像處理。在接下來的學習中,你将學習到如何使用Matplotlib庫來展示和處理圖像。通過Matplotlib,你可以友善地對圖像進行縮放、儲存等操作。
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # 隐藏 x 軸和 y 軸上的刻度值
plt.show()
視窗的螢幕截圖如下所示:
另外,有空可看看:
Matplotlib提供了許多繪圖選項,可以根據需求進行圖像的處理和展示。如果需要了解更多的繪圖選項,可以參考Matplotlib文檔以擷取更多詳細資訊,其中會涵蓋許多實用的技巧和方法。
需要注意的是:
當使用OpenCV加載彩色圖像時,它處于BGR模式,而Matplotlib以RGB模式顯示圖像。是以,如果使用OpenCV加載彩色圖像,那麼在Matplotlib中将無法正确顯示彩色圖像。如果遇到這種情況,可以采用一些轉換方法來将圖像從BGR模式轉換為RGB模式,以便正确地在Matplotlib中顯示彩色圖像。關于這個問題,我們将在接下來的練習中進行更詳細的讨論。