将 RGB 图像转换为黑白图像

Convert RGB image to black and white

我有以下 RGB 图像(形状为 (3, 50, 200)):

我想通过将图像转换为纯黑白来减小尺寸(这张图像看起来是黑白的,但实际上它有我提到的 3 个通道)。

我(在互联网的帮助下)实现了以下功能:

def rgb2gray(rgb):
    r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
    gray = (0.2989 * r + 0.5870 * g + 0.1140 * b)
    for x in range(rgb.shape[1]):
      for y in range(rgb.shape[0]):
        if gray[y][x]>128: #if bright
          gray[y][x] = 255.0 #white
        else:
          gray[y][x] = 0.0 #black
    return gray

那我运行:

im = cv2.imread("samples/55y2m.png")
print(im.shape)
print(rgb2gray(im).shape)
plt.imshow(rgb2gray(im))

并得到以下输出:

(50, 200, 3) #for the input
(50, 200)    #for the output

为什么图片是黄色和紫色的,如何把它变成黑色和白色?

p.s。我试图将函数更改为:

def rgb2gray(rgb):
    r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
    gray = (0.2989 * r + 0.5870 * g + 0.1140 * b)

    for x in range(rgb.shape[1]):
      for y in range(rgb.shape[0]):
        if gray[y][x]>128:
          rgb[y][x] = 255.0 #changed
        else:
          rgb[y][x] = 0.0 #changed
    return rgb #changed

我实际上得到了纯黑白图像,但它是 3 个通道 (RGB)。所以我试着去掉最后一个轴,又变成了紫色和黄色。

你不需要这个:

r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = (0.2989 * r + 0.5870 * g + 0.1140 * b)

因为你的图像已经是灰度的,这意味着 R == G == B,所以你可以选择 GREEN 通道(或任何其他你喜欢的通道)并使用它。

是的,为 matplotlib 指定颜色图:

plt.imshow(im[:,:,1], cmap='gray')