将RGB图像转换为黑白

时间:2020-04-14 00:49:56

标签: python python-3.x matplotlib rgb

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

enter image description here

我想通过将图像转换为纯黑白来缩小尺寸(该图像看起来是黑白的,但实际上我提到了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)。因此,我尝试删除最后一个轴,然后再次变紫色和黄色。

enter image description here

1 个答案:

答案 0 :(得分:3)

您不需要这个:

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')