Как правило, чтобы добавить новое измерение в матрицу numpy, вы можете использовать np.newaxis
или np.expand_dims
(или просто reshape
)
import numpy as np
nh, nw = 300, 300
x = np.random.rand(nh, nw, 3)
y = x[np.newaxis, ...]
z = np.expand_dims(x, axis=0)
>>> x.shape
(300, 300, 3)
>>> y.shape
(1, 300, 300, 3)
>>> z.shape
(1, 300, 300, 3)
Но если выхотите передать RGB
модели CNN, возможно, вам нужен еще один шаг: поменять местами каналы и конвертировать в float32:
import cv2
import numpy as np
fpath = "test.png"
nh, nw = 300, 300
img = cv2.imread(fpath)
img = cv2.cvtColor(cv2.resize(img, (nw, nh)), cv2.COLOR_BGR2RGB)
ximg = np.float32(img) / 255.0
ximg = ximg[np.newaxis, ...]
>>> (ximg.shape, ximg.dtype)
((1, 300, 300, 3), dtype('float32'))