将多个numpy图像转换为灰度
Converting multiple numpy images to gray scale
我目前有一个包含 2000 张照片的 numpy 数组 'images'。我正在寻找一种将 'images' 中的所有照片转换为灰度的改进方法。图像的形状是 (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, 512, 3))
gray = rgb2gray(rgb)
# shape: (100, 512, 512)
我目前有一个包含 2000 张照片的 numpy 数组 'images'。我正在寻找一种将 'images' 中的所有照片转换为灰度的改进方法。图像的形状是 (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, 512, 3))
gray = rgb2gray(rgb)
# shape: (100, 512, 512)