Like Share Discussion Bookmark Smile

J.J. Huang   2026-01-09   Python OpenCV 02.入門篇:基礎操作   瀏覽次數:次   DMCA.com Protection Status

Python | OpenCV 圖片讀取與顯示

📚 前言

在前一篇我們理解了「圖片在電腦中就是矩陣」。
這一篇要進入 影像基本操作:如何用 OpenCV 讀取圖片、顯示圖片,以及注意事項。

🖼️ 讀取圖片

使用 imread() 方法,可以開啟圖片。官方文件
imread() 有兩個參數:

  • 第一個參數:檔案的路徑和名稱。
  • 第二個參數:可不填,表示以何種模式 (mode) 開啟圖片。

常見的模式有:

  • cv2.IMREAD_COLOR(預設,彩色讀取,忽略透明度)
  • cv2.IMREAD_GRAYSCALE(灰階讀取)
  • cv2.IMREAD_UNCHANGED(保留原始影像,包含透明度)

👉 開啟的圖片支援常見的 jpg、png、bmp… 等格式。

下面是最基本開啟圖片的程式碼:

1
2
3
4
5
6
7
8
import cv2

# 讀取圖片
img = cv2.imread("test.png")

print("影像型態:", type(img))
print("影像大小:", img.shape)
print("資料型態:", img.dtype)

輸出結果可能是:

1
2
3
影像型態: <class 'numpy.ndarray'>
影像大小: (360, 359, 3)
資料型態: uint8

👉 可以看到,圖片就是 NumPy 的陣列。


圖:讀取圖片後輸出影像型態與大小資訊

imread 的第二個參數 (flags)

第二個參數,能使用不同的模式開啟圖片。官方文件

cv2.imread(filename, flags)

  • filename:檔案路徑與名稱。
  • flags:讀取模式,決定如何載入圖片。
參數 數值 說明
cv2.IMREAD_COLOR 1 預設模式,讀取彩色影像,忽略透明度
cv2.IMREAD_GRAYSCALE 0 讀取為灰階影像
cv2.IMREAD_UNCHANGED -1 保留原始影像(包含 alpha 通道)
cv2.IMREAD_ANYDEPTH 2 依據影像深度讀取(16/32 位元)
cv2.IMREAD_ANYCOLOR 4 嘗試以任何顏色格式讀取
cv2.IMREAD_REDUCED_COLOR_2 17 彩色影像縮小為原始大小的 1/2
cv2.IMREAD_REDUCED_COLOR_4 33 彩色影像縮小為原始大小的 1/4
cv2.IMREAD_REDUCED_COLOR_8 65 彩色影像縮小為原始大小的 1/8
cv2.IMREAD_REDUCED_GRAYSCALE_2 7 灰階影像縮小為原始大小的 1/2
cv2.IMREAD_REDUCED_GRAYSCALE_4 23 灰階影像縮小為原始大小的 1/4
cv2.IMREAD_REDUCED_GRAYSCALE_8 39 灰階影像縮小為原始大小的 1/8

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import cv2

# 預設彩色讀取
img_color = cv2.imread("test.png", cv2.IMREAD_COLOR)

# 灰階讀取
img_gray = cv2.imread("test.png", cv2.IMREAD_GRAYSCALE)

# 保留透明度
img_alpha = cv2.imread("test.png", cv2.IMREAD_UNCHANGED)

# 縮小讀取 (1/2)
img_small = cv2.imread("test.png", cv2.IMREAD_REDUCED_COLOR_2)

print("彩色:", img_color.shape)
print("灰階:", img_gray.shape)
print("含透明度:", img_alpha.shape)
print("縮小:", img_small.shape)


圖:不同模式讀取圖片後的矩陣大小差異

👀 顯示圖片

使用 cv2.imshow() 可以顯示圖片。官方文件
這個方法有 兩個參數

  • 第一個參數:視窗標題 (string),會顯示在視窗上方。
  • 第二個參數:要顯示的影像 (NumPy 陣列)。

範例:

1
2
3
cv2.imshow("My Image", img)
cv2.waitKey(0) # 等待按鍵
cv2.destroyAllWindows()

waitKey 的作用

cv2.waitKey() 用來設定 等待時間 (毫秒),並監聽鍵盤事件:官方文件

  • cv2.waitKey(0) → 無限等待,直到按下任意鍵。
  • cv2.waitKey(2000) → 等待 2000 毫秒 (2 秒),自動關閉視窗。
  • 如果在等待期間按下某個鍵,會回傳該鍵的 ASCII 值,可用來做互動控制。

關閉視窗

  • cv2.destroyAllWindows() → 關閉所有由 OpenCV 建立的視窗。官方文件
  • cv2.destroyWindow("My Image") → 只關閉指定名稱的視窗。官方文件


圖:使用 imshow 顯示圖片並等待按鍵

🛠️ 範例程式:讀取與顯示

1
2
3
4
5
6
7
8
9
import cv2

# 讀取圖片
img = cv2.imread("test.png")

# 顯示圖片
cv2.imshow("Test Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:讀取彩色圖片並顯示

🛠️ 範例程式:讀取灰階模式與顯示

1
2
3
4
5
6
7
8
9
import cv2

# 讀取圖片
img = cv2.imread("test.png", cv2.IMREAD_GRAYSCALE) # 使用 cv2.IMREAD_GRAYSCALE 模式

# 顯示圖片
cv2.imshow("Test Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:讀取灰階圖片並顯示

⚠️ 注意事項

  • 路徑問題cv2.imread() 需要正確的檔案路徑,否則會回傳 None
  • 顏色通道:OpenCV 預設是 BGR,不是 RGB。
  • 顯示環境:在 Jupyter Notebook 中,cv2.imshow() 可能無法使用,可以改用 matplotlib
1
2
3
4
import matplotlib.pyplot as plt

plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

結語 🎯

這一篇我們完成了圖片的 讀取與顯示,並理解了 OpenCV 的基本操作。
下一篇將進一步學習 影像儲存與格式轉換,儲存影像並進行格式轉換,掌握影像處理的基礎技巧。


註:以上參考了
OpenCV Tutorials
OpenCV-Python Tutorials