OpenCV中如何删除图像的颜色通道以匹配单通道图像尺寸
图像维度统一处理方案
当前img1为(31,27,3)格式的三通道数组,img2为(31,27)格式的单通道数组,可根据实际语义需求选择对应方式移除img1的第三维度:
- 场景1:确认img1的三个通道存储的是完全一致的内容(即单通道图像被复制扩展为三通道格式存储)
直接通过numpy索引提取任意一个通道即可快速去掉第三维度,代码为:img1 = img1[:, :, 0]
执行后img1的shape会直接变为(31,27),和img2的维度完全匹配,像素值与原数组对应位置完全一致。 - 场景2:img1是正常存储的彩色图,需要和img2的灰度图像语义对齐
按照通用的灰度转换规则,将三个通道的像素值按人眼感知权重合并为单通道值,对应代码:- 依赖OpenCV环境时,直接调用内置转换方法:
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) - 无OpenCV依赖时,用numpy手动实现加权计算:
行业通用灰度转换权重为 Gray = 0.299R + 0.587G + 0.114*B,对应代码为
img1 = (0.299 * img1[:, :, 2] + 0.587 * img1[:, :, 1] + 0.114 * img1[:, :, 0]).astype(np.uint8)
这种方式处理后的单通道图符合人眼视觉感知逻辑,和常规流程生成的灰度图属性一致。
- 依赖OpenCV环境时,直接调用内置转换方法:
- 避坑提示:不要尝试使用*
np.squeeze(img1)* 做维度压缩——该方法仅能移除长度为1的冗余轴,当前img1的第三维度长度为3,不属于可被squeeze移除的维度,执行后无法得到目标shape。
内容的提问来源于stack exchange,提问作者Leontina Menino
相关产品推荐
相关产品推荐

