開啟並顯示圖片
這篇教學會介紹 OpenCV 裡 imread()、imshow()、waitKey() 方法,透過這些方法,在電腦中使用不同的色彩模式開啟圖片並顯示圖片。
因為程式中的 OpenCV 會需要使用鏡頭或 GPU,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda ) ,並安裝 OpenCV 函式庫 ( 參考:OpenCV 函式庫 )。
imread() 開啟圖片
使用 imread() 方法,可以開啟圖片,imread() 有兩個參數,第一個參數為檔案的路徑和名稱,第二個參數可不填,表示以何種模式 ( mode ) 開啟圖片,開啟的圖片支援常見的 jpg、png...等格式,下面是最基本開啟圖片的程式碼。
import cv2
img = cv2.imread('meme.jpg') # 開啟圖片,預設使用 cv2.IMREAD_COLOR 模式
cv2.imshow('oxxostudio', img) # 使用名為 oxxostudio 的視窗開啟圖片
cv2.waitKey(0) # 按下任意鍵停止
cv2.destroyAllWindows() # 結束所有圖片視窗
如果設定第二個參數,就能使用不同的色彩模式開啟圖片 ( 色彩模式參考:色彩模式數字對照表 ),下面的程式碼執行後,會以灰階模式開啟圖片。
import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE) # 使用 cv2.IMREAD_GRAYSCALE 模式
# img = cv2.imread('meme.jpg', 2) # 也可使用數字代表模式
cv2.imshow('oxxostudio', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
imshow() 顯示圖片
在上面的程式碼中,使用了 imshow() 的方法顯示圖片,imshow() 包含兩個參數,第一個參數為字串,表示要開啟圖片的視窗名稱,第二個參數為使用 imread() 讀取的圖片。
waitKey() 等待多久關閉
使用 imshow() 方法時會搭配 waitKey(),waitKey() 表示等待與讀取使用者按下的按鍵,包含一個單位為「毫秒」的參數,如果設定 0 表示持續等待至使用者按下按鍵為止,下方的程式碼設定 waitKey 的參數為 2000,表示兩秒後會關閉圖片視窗 ( 兩秒內如果按下 q 就會中止計時並關閉視窗 )。
如果遇到視窗無法關閉的狀況,可以使用 destroyAllWindows() 的方法關閉所有視窗,或使用 destroyWindow(name) 關閉指定名稱的視窗。
import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE) # 使用 cv2.IMREAD_GRAYSCALE 模式
cv2.imshow('oxxostudio', img)
cv2.waitKey(2000) # 等待兩秒 ( 2000 毫秒 ) 後關閉圖片視窗
cv2.destroyAllWindows()
色彩模式數字對照表
數字 | 模式 | 說明 |
---|---|---|
1 | cv2.IMREAD_UNCHANGED | 原本的圖像( 如果圖像有 alpha 通道則會包含 )。 |
2 | cv2.IMREAD_GRAYSCALE | 灰階圖像。 |
3 | cv2.IMREAD_COLOR | BGR 彩色圖像。 |
4 | cv2.IMREAD_ANYDEPTH | 具有對應的深度時返回 16/32 位元圖像,否則將其轉換為 8 位元圖像。 |
5 | cv2.IMREAD_ANYCOLOR | 以任何可能的顏色格式讀取圖像。 |
6 | cv2.IMREAD_LOAD_GDAL | 使用 gdal 驅動程式加載圖像。 |
7 | cv2.IMREAD_REDUCED_GRAYSCALE_2 | 灰階圖像,圖像尺寸減小 1/2。 |
8 | cv2.IMREAD_REDUCED_COLOR_2 | BGR 彩色圖像,圖像尺寸減小 1/2。 |
9 | cv2.IMREAD_REDUCED_GRAYSCALE_4 | 灰階圖像,圖像尺寸縮小 1/4。 |
10 | cv2.IMREAD_REDUCED_COLOR_4 | BGR 彩色圖像,圖像尺寸減小 1/4。 |
11 | cv2.IMREAD_REDUCED_GRAYSCALE_8 | 灰階圖像,圖像尺寸縮小 1/8。 |
12 | cv2.IMREAD_REDUCED_COLOR_8 | BGR 彩色圖像,圖像尺寸減小 1/8。 |
13 | cv2.IMREAD_IGNORE_ORIENTATION | 不要根據 EXIF 資訊的方向標誌旋轉圖像。 |
參考資料
- OpenCV:imread()
- OpenCV:ImreadModes
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~