将多个numpy图像转换为灰度

问题描述

我目前有一个包含2000张照片的numpy数组“图像”。我正在寻找一种将“图像”中的所有照片转换为灰度的改进方法。图像的形状是(2000、100、100、3)。这是我到目前为止所拥有的:

# Function takes index value and convert images to gray scale 
def convert_gray(idx):
  gray_img = np.uint8(np.mean(images[idx],axis=-1))
  return gray_img

#create list
g = []
#loop though images 
for i in range(0,2000):
  #call convert to gray function using index of image
  gray_img = convert_gray(i)
  
  #add grey image to list
  g.append(gray_img)

#transform list of grey images back to array
gray_arr = np.array(g)

我想知道是否有人可以建议一种更有效的方法?我需要数组格式的输出

解决方法

您的平均意思是最后一个轴,您现在要做的事情:

Gray = 1/3 * Red + 1/3 * Green + 1/3 * Blue

但是实际上,另一个转换公式更为常见(请参见this answer):

Gray = 299/1000 * Red + 587/1000 * Green + 114/1000 * Blue

@unutbu提供的代码也适用于图像数组:

import numpy as np

def rgb2gray(rgb):
    return np.dot(rgb[...,:3],[0.2989,0.5870,0.1140])

rgb = np.random.random((100,512,3))
gray = rgb2gray(rgb)
# shape: (100,512)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...