У меня есть маринованный учебный набор данных, содержащий изображения RGB 32x32. В качестве шага предварительной обработки я хочу преобразовать их в оттенки серого.
Я прочитал в наборе данных обучения как -
import pickle
import cv2
training_file = "../data/train.p"
with open(training_file, mode='rb') as f:
train = pickle.load(f)
X_train, y_train = train['features'], train['labels']
Затем я пытаюсь использовать цикл for
для преобразования каждого изображения в оттенки серого, используя следующий код -
for i in range(0,len(X_train)-1):
X_train[i] = cv2.cvtColor(X_train[i], cv2.COLOR_BGR2GRAY)
Но это выдает следующую ошибку -
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-a920a94faefc> in <module>()
1 for i in range(0,len(X_train)-1):
----> 2 X_train[i] = cv2.cvtColor(X_train[i], cv2.COLOR_BGR2GRAY)
ValueError: could not broadcast input array from shape (32,32) into shape (32,32,3)
Однако, если я повторю эту процедуру, используя только одно изображение, я не получу никакой ошибки. Я сделал следующее -
![convert single image to grayscale](https://i.stack.imgur.com/l1Ajz.png)
Может кто-нибудь объяснить причину ошибки и как я могу преобразовать весь список в оттенки серого?