虽然我知道如何使用CV2
将单色图像(32,32,3)转换为灰度:
img = cv2.cvtColor( img, cv2.COLOR_RGB2GRAY )
我需要在4D numpy阵列(60000,32,32,3)中转换一批60,000张图像,我该如何实现?
答案 0 :(得分:1)
使用numpy
的另一个选项:
grayscale_imgs = np.dot(img_stack, [0.299 , 0.587, 0.114])
grayscale_imgs.shape # => (60000, 32, 32)
有关加权总和的更多信息,请参见here
答案 1 :(得分:0)
假设您的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解决方案实际上可能执行得更快。