如何将多张单通道灰度图作为网络输入进行格式处理?
处理三张单通道灰度图作为网络输入的方法
完全可以用cv2.merge()来处理这种场景——它的核心功能是将多个单通道图像合并为一个多通道图像,并不局限于RGB通道,自定义的3通道输入同样适用。
具体操作步骤如下:
确保输入图像是单通道格式:
读取灰度图时,用cv2.imread(path, cv2.IMREAD_GRAYSCALE)可以直接得到形状为(H, W)的单通道数组;如果图像已经带有冗余通道维度(比如(H, W, 1)),可以用img = img.squeeze()压缩掉多余维度。使用cv2.merge()合并:
把三张单通道图像放进列表,传入cv2.merge()即可得到形状为(H, W, 3)的3通道图像,示例代码:import cv2 # 读取三张单通道灰度图 gray1 = cv2.imread("gray_img1.png", cv2.IMREAD_GRAYSCALE) gray2 = cv2.imread("gray_img2.png", cv2.IMREAD_GRAYSCALE) gray3 = cv2.imread("gray_img3.png", cv2.IMREAD_GRAYSCALE) # 合并为3通道图像 merged = cv2.merge([gray1, gray2, gray3])可选:用numpy.stack()替代:
如果习惯用numpy操作,np.stack()也能实现同样效果,指定axis=-1把通道维度放在最后:import numpy as np merged = np.stack([gray1, gray2, gray3], axis=-1)适配网络输入格式:
不同深度学习框架的输入维度顺序不同:- TensorFlow/Keras通常要求
(B, H, W, C),合并后的图像直接扩展batch维度即可(比如merged[np.newaxis, ...]); - PyTorch要求
(B, C, H, W),需要转置维度:merged = np.transpose(merged, (2, 0, 1)),再扩展batch维度。
- TensorFlow/Keras通常要求
内容的提问来源于stack exchange,提问作者Askav
相关产品推荐
相关产品推荐

