核心函數:cv2.imread()

從文件中讀取(加載)圖像到一個 NumPy 數組 中。
該數組是 OpenCV 的圖像基本表示形式(即 cv2.Mat 在 Python 中對應 numpy.ndarray)。

函數定義

cv2.imread(filename, flags=cv2.IMREAD_COLOR)

參數詳解

參數名

類型

説明

filename

str

圖像文件路徑,可以是絕對路徑或相對路徑

flags

int

指定加載方式(見下表)

flags 參數選項(圖像加載模式)

模式常量

説明

cv2.IMREAD_COLOR

以彩色模式加載圖像(默認值),忽略透明度通道(即讀取 BGR 三通道)。

cv2.IMREAD_GRAYSCALE

以灰度模式加載圖像(單通道)。

cv2.IMREAD_UNCHANGED

保留圖像的原始通道,包括 alpha 通道(如 PNG 的透明度)。

cv2.IMREAD_ANYDEPTH

如果圖像是 16 位或 32 位,則以相應的深度加載。

cv2.IMREAD_ANYCOLOR

以任意顏色類型加載圖像。

cv2.IMREAD_REDUCED_COLOR_2

以 1/2 尺寸讀取彩色圖像(加快讀取速度)。

cv2.IMREAD_REDUCED_COLOR_4

以 1/4 尺寸讀取彩色圖像。

cv2.IMREAD_REDUCED_COLOR_8

以 1/8 尺寸讀取彩色圖像。

cv2.IMREAD_REDUCED_GRAYSCALE_2

以 1/2 尺寸讀取灰度圖像。

cv2.IMREAD_REDUCED_GRAYSCALE_4

以 1/4 尺寸讀取灰度圖像。

cv2.IMREAD_REDUCED_GRAYSCALE_8

以 1/8 尺寸讀取灰度圖像。

返回值

返回一個 numpy.ndarray

  • 彩色圖像 → 3 通道矩陣 (B, G, R)
  • 灰度圖像 → 單通道矩陣
  • 失敗時返回 None

示例

示例 1:加載彩色圖像(默認方式)

import cv2
# 讀取彩色圖像
img = cv2.imread("test.jpg", cv2.IMREAD_COLOR)
# 判斷是否讀取成功
if img is None:
print("無法加載圖像,請檢查路徑或文件名。")
else:
print("圖像加載成功,尺寸:", img.shape)
cv2.imshow("Color Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

示例 2:加載灰度圖像

import cv2
gray = cv2.imread("test.jpg", cv2.IMREAD_GRAYSCALE)
print("灰度圖像尺寸:", gray.shape)
cv2.imshow("Gray Image", gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:灰度圖像只有一個通道(shape 類似 (height, width)

示例 3:加載帶透明通道的圖像(如 PNG)

import cv2
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
print("圖像通道數:", img.shape[2] if len(img.shape) == 3 else 1)
cv2.imshow("With Alpha", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

若文件包含透明通道,則 shape 會是 (H, W, 4)(B, G, R, A)

示例 4:讀取圖像並縮小加載(節省內存)

import cv2
# 以 1/4 尺寸讀取
img_small = cv2.imread("test.jpg", cv2.IMREAD_REDUCED_COLOR_4)
cv2.imshow("Reduced Image", img_small)
cv2.waitKey(0)
cv2.destroyAllWindows()

在處理大圖片(例如 8K 或超大衞星圖)時,這種模式能顯著節省內存。

示例 5:錯誤處理(路徑錯誤)

import cv2
import os
path = "not_exist.jpg"
img = cv2.imread(path)
if img is None:
print(f"圖像 {path} 加載失敗,請檢查路徑或文件格式。")
else:
print("圖像加載成功。")

總結

功能

函數

示例

加載彩色圖像

cv2.imread(path, cv2.IMREAD_COLOR)

彩色圖像(默認)

加載灰度圖像

cv2.imread(path, cv2.IMREAD_GRAYSCALE)

灰度化處理

加載含透明通道

cv2.imread(path, cv2.IMREAD_UNCHANGED)

保留 alpha

縮放加載

cv2.imread(path, cv2.IMREAD_REDUCED_COLOR_4)

加快速度

檢查加載失敗

if img is None:

檢測是否成功

中文路徑加載

np.fromfile() + cv2.imdecode()

支持中文路徑