目录
一. 确认图像的数组类型二. 使用Matplotlab显示灰度图像彩色图像一. 确认图像的数组类型
在使用 OpenCV 的cv2.imread()
函数读取图像时,第二个参数(标志)决定了图像的读取方式。具体来说,0
、1
和-1
分别对应不同的读取模式:
cv2.IMREAD_GRAYSCALE
0彩色(忽略透明度通道)cv2.IMREAD_COLOR
1彩色(包括 Alpha 透明度通道,如果存在)cv2.IMREAD_UNCHANGED
-1这里不讨论处理包含透明度通道的图像
使用img.shape
判断图像类型
在 OpenCV 中,当你使用cv2.imread()
函数读取一张图像时,它会将图像加载到内存中,并将其存储为一个 NumPy 数组。img.shape
是 NumPy 数组的一个属性,它返回一个包含数组各维度大小的元组。通过检查这个元组的长度(即维度的数量),我们可以确定数组的类型或结构。
(height, width)
,img.shape
返回的元组长度为 2。彩色图像:通常是一个三维数组,表示为(height, width, channels)
,channels
表示颜色通道的数量(例如 RGB 图像有三个通道,形状通常是(height, width, 3)
),img.shape
返回的元组长度为 3。# img 是一个 NumPy 数组if len(img.shape) == 2: print("这是一个灰度图像")elif len(img.shape) == 3: print("这是一个彩色图像")
二. 使用Matplotlab显示
灰度图像
plt.imshow(img, cmap='gray')
理解cmap='gray'
直接imshow
会使用默认的颜色映射(通常是viridis
),这通常不是期望的灰度效果。需要明确指定颜色映射 (cmap) 为 'gray',这样可以确保图像中的每个像素值都被正确地映射到灰度级别。
彩色图像
OpenCV读取到的色彩通道顺序为BGR
, Matplotlab读取显示的色彩通道为RGB
,所以需要读取时转换通道
plt.imshow(img[:, :, ::-1])
理解img[:, :, ::-1]
第一维和第二维分别代表图像的高度和宽度,第三维有三个通道:红(R)、绿(G)、蓝(B)
:
表示选取所有元素。::-1
是Python中的切片语法,表示从尾到头(逆序)选择元素。这里的意图通常是翻转最后一个维度的数据,比如将RGB格式转换为BGR格式,或者相反。