如何将1通道的灰度图像形状转换为3通道的彩色图像形状?



我想将mnist数据集加载到mobilenet V1 CNN于是,我遇到了这个问题

ValueError: Error when checking input: expected input_1 to have shape (32, 32, 3) but got array with shape (28, 28, 1)
下面是我的代码
image_data, label_data = data['image'], data['label']

idx_list = {}
for i in range(10):
idx_list[i] = np.where(label_data == i)  # return tuple dtype (rows indices, column indices)

selected_test_sample_indices = {}
for label in range(10):
selected_test_sample_indices[label] = random.sample(set(idx_list[label][0]), int(len(idx_list[label][0]) * 0.2))

selected_train_sample_indicies = {}
for label in range(10):
selected_train_sample_indicies[label] = list(set(idx_list[label][0])- set(selected_test_sample_indices[label]))

train_data_indicies, test_data_indicies = [],[]

for label, indicies in selected_train_sample_indicies.items():
train_data_indicies = train_data_indicies + indicies # merge 2 list
for label, indicies in selected_test_sample_indices.items():
test_data_indicies = test_data_indicies + indicies
random.shuffle(train_data_indicies)
random.shuffle(test_data_indicies)

y_train_data = np.array([label_data[idx] for idx in train_data_indicies])
X_train_data = np.array([image_data[idx] for idx in train_data_indicies])
y_test_data = np.array([label_data[idx] for idx in test_data_indicies])
X_test_data = np.array([image_data[idx] for idx in test_data_indicies])
number_of_classes = 10
y_train = y_train_data
y_test = y_test_data

X_train = X_train_data.reshape(X_train_data.shape[0], img_rows, img_cols, 1)
X_test = X_test_data.reshape(X_test_data.shape[0], img_rows, img_cols, 1)```

当我试图重塑我得到以下错误

ValueError: cannot reshape array of size 11146912 into shape (14218,32,32,1)

当我将改为(4500,32,32,3)时,总和小于11146912这让我很困惑。请帮我修复这个错误。

MNIST数据集包含灰度图像,大小为28x28像素。这就是为什么每个图像的形状是(28,28,1),每个值在0-255之间。这是另一个同样问题的stackoverflow问题。最有效的答案是将灰度图像转换为rgb图像,然后调整图像的大小。

将灰度图像转换为rgb图像后,图像的形状将从

28 x 28 x 128 x 28 x 3

那么你需要将它的大小调整为32。你可以使用openCV库。

resized_image = cv2.resize(image, (32, 32))

resized_image形状为32 x 32 x 3

最新更新