将CV2灰度应用于Numpy 4D阵列

时间:2018-05-09 18:58:36

标签: python-3.x cv2

虽然我知道如何使用CV2将单色图像(32,32,3)转换为灰度:

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

我需要在4D numpy阵列(60000,32,32,3)中转换一批60,000张图像,我该如何实现?

2 个答案:

答案 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解决方案实际上可能执行得更快。