Python中如何将(885, 1268)形状的图像转为(1,254,254,3)格式?
实现方案
你当前得到的形状为(885, 1268)的数组是单通道灰度图像的数值矩阵,要转换为形状为(1,254,254,3)的数组,需要完成尺寸缩放、单通道转3通道、新增batch维度三个核心操作,以下是可直接运行的实现代码:
基于OpenCV实现
安装依赖:pip install opencv-python numpy
import cv2 import numpy as np # 假设你的原数组命名为 src_array ,形状为(885, 1268) # 1. 缩放至254×254尺寸,插值方式可按需调整,常用的有cv2.INTER_AREA(缩小推荐)、cv2.INTER_LINEAR(线性插值) resized_array = cv2.resize(src_array, (254, 254), interpolation=cv2.INTER_AREA) # 2. 单通道转3通道:将灰度通道复制3次堆叠 rgb_array = cv2.cvtColor(resized_array, cv2.COLOR_GRAY2RGB) # 3. 新增最外层的batch维度 target_array = np.expand_dims(rgb_array, axis=0) # 验证形状 print(target_array.shape) # 输出为 (1, 254, 254, 3)
基于Pillow实现
安装依赖:pip install pillow numpy
from PIL import Image import numpy as np # 假设你的原数组命名为 src_array ,形状为(885, 1268) # 1. 转PIL图像对象后缩放 img = Image.fromarray(src_array) resized_img = img.resize((254, 254), Image.Resampling.LANCZOS) resized_array = np.array(resized_img) # 2. 单通道转3通道,堆叠三次 rgb_array = np.stack([resized_array]*3, axis=-1) # 3. 新增batch维度 target_array = np.expand_dims(rgb_array, axis=0) # 验证形状 print(target_array.shape) # 输出为 (1, 254, 254, 3)
注意事项
- 如果你需要将数组作为深度学习模型的输入,可按需补充数据类型转换和归一化操作,比如添加
target_array = target_array.astype(np.float32) / 255.0将数值归一化到0~1区间 - 插值方式可根据你的业务场景调整,缩小图像推荐用区域插值/ Lanczos插值,放大图像推荐用线性插值
内容的提问来源于stack exchange,提问作者Hamza.S
相关产品推荐
相关产品推荐

