Применение полутонов CV2 к массиву Numpy 4D - PullRequest
0 голосов
/ 09 мая 2018

Хотя я знаю, как преобразовать одноцветное изображение (32,32,3) в оттенки серого, используя CV2:

img = cv2.cvtColor( img, cv2.COLOR_RGB2GRAY )

Мне нужно преобразовать пакет из 60000 изображений в массив 4D (60000,32,32,3), как мне этого добиться?

1 Ответ

0 голосов
/ 21 июля 2018

Допустим, ваш 4D массив изображений называется img_stack с формой (60000,32,32,3).

Вы можете сделать:

gray_stack = np.empty_like(img_stack[...,0])
for i in range(img_stack.shape[0]):
    gray_stack[i] = cv2.cvtColor(img_stack[i], cv2.COLOR_RGB2GRAY)

Результирующая форма (60000,32,32).

Или вы можете сделать:

gray_stack = np.empty_like(img_stack[...,:1])
for i in range(img_stack.shape[0]):
    gray_stack[i,:,:,0] = cv2.cvtColor(img_stack[i], cv2.COLOR_RGB2GRAY)

Результирующая форма (60000,32,32,1).


Бонусное решение Tensorflow:

gray_stack = tf.image.rgb_to_grayscale(img_stack, name=None)

Результирующая форма будет (60000,32,32,1).

Указанные выше решения OpenCV могут работать быстрее.

...