You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cv2读取28*28灰度PNG得到4维numpy数组,如何获得期望的3维数组

问题原因

OpenCV的cv2.imread()接口默认使用cv2.IMREAD_COLOR参数读取图像,该模式下无论输入原图是否为灰度图,都会强制转换为3通道BGR格式的图像,因此你读取的每一张28*28灰度图都会得到形状为(28,28,3)的数组,全部堆叠后就得到了4维的(5103, 28, 28, 3)结果。

解决方法

方法1:读取时直接指定灰度模式(推荐)

在调用cv2.imread()时传入第二个参数cv2.IMREAD_GRAYSCALE,即可直接读取为单通道灰度数组,无需额外转换,效率最高。
修改后的完整代码如下:

import cv2
import glob
import numpy as np

X_data = []
files = glob.glob ("/content/gdrive/MyDrive/newtest/*.png")
for myFile in files:
    # 指定灰度模式读取图像
    image = cv2.imread (myFile, cv2.IMREAD_GRAYSCALE)
    X_data.append (image)

print(np.array(X_data).shape) # 输出将为 (5103, 28, 28)

小提示:cv2.IMREAD_GRAYSCALE对应的数值常量为0,你也可以简写为cv2.imread(myFile, 0),效果完全一致

方法2:读取后手动转换为灰度图

如果你已经将图像读取为3通道格式,也可以通过颜色空间转换得到灰度图:

image = cv2.imread(myFile)
# 将BGR3通道图转换为单通道灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

该方法适合需要同时使用彩色图和灰度图的场景,仅需灰度图的情况下优先使用方法1。

内容的提问来源于stack exchange,提问作者Libnah Pratheeth Bollam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 04:24:03