Вы не должны усреднять каналы. Существует определенный баланс между каналами RGB для преобразования изображения в оттенки серого, и он не всегда удобен для каждого 0,33%. Это то, что:
((0.3*R) + (0.59*G) + (0.11*B))
Вместо усреднения или выполнения вручную, я предлагаю вам использовать:
import cv2
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Затем добавьте измерение:
img = img[..., np.newaxis]
или
img = np.expand_dims(img, -1)
Функциональное отличие состоит в том, что, очевидно, ваш CNN не будет видеть цвет, если вы превратите его в оттенки серого. Поэтому он не сможет использовать эту информацию для классификации.