核心函数: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:加载彩色图像(默认方式)
python
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:加载灰度图像
python
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)
python
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:读取图像并缩小加载(节省内存)
python
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:错误处理(路径错误)
python
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() |
支持中文路径 |