为什么像这样索引图片的 ndarray 会使图片变成绿色和蓝色?

why indexing ndarray of picture like this makes picture green and blue?

   import numpy as np
    from skimage import io 
    import matplotlib.pyplot as plt
    
    jeju = io.imread('jeju.jpg')

    jeju.shape 

> (960,1280,3)

    jeju

> Array([[[171, 222, 251],
        [172, 223, 252],
        [172, 223, 252],
        ...,
        [124, 189, 255],
        [121, 189, 254],
        [120, 188, 253]],

       [[173, 224, 253],
        [173, 224, 253],
        [173, 224, 253],
        ...,
        [124, 189, 255],
        [122, 190, 255],
        [121, 189, 254]],

       [[174, 225, 254],
        [174, 225, 254],
        [175, 226, 255]
        ...,
        [125, 190, 255],
        [122, 190, 255],
        [122, 190, 255]],

       ...,

       [[ 66,  93,  26],
        [ 89, 114,  46],
        [ 49,  72,   2],
        ...,
        [  2,  29,   0],
        [ 34,  59,  17],
        [ 40,  63,  21]],

       [[ 44,  71,   4],
        [ 23,  50,   0],
        [ 29,  52,   0],
        ...,
        [ 40,  67,  22],
        [  0,  19,   0],
        [ 16,  41,   0]],

       [[ 29,  58,   0],
        [ 44,  71,   2],
        [ 84, 110,  37],
        ...,
        [ 17,  44,   1],
        [ 33,  60,  17],
        [ 18,  43,   1]]], dtype=uint8)
    
    plt.imshow(jeju)


    
    plt.imshow(jeju[:,:,0])



    jeju[:,:,0]

>Array([[171, 172, 172, ..., 124, 121, 120],
       [173, 173, 173, ..., 124, 122, 121],
       [174, 174, 175, ..., 125, 122, 122],
       ...,
       [ 66,  89,  49, ...,   2,  34,  40],
       [ 44,  23,  29, ...,  40,   0,  16],
       [ 29,  44,  84, ...,  17,  33,  18]], dtype=uint8)

    ---------------------------------------------

    

如上,我从目录中读取图片并对其进行索引,使图片变红。 因为 jeju.shape 中的 (960, 1280, 3) 是 (height,width,rgb) 并且我认为如果我使用 [:,:,0],0 表示红色。(我认为 r=0,g=1, b=2) 但结果不是红色图片,而是充满绿色和蓝色的图片。 为什么会发生这件事? [:,:,0] 是什么意思?

你说得对,它代表的是红色通道。但是,官方文档中的函数 imshow 指出,对于二维数组,使用归一化和颜色映射将值映射到颜色。

如果你只想绘制你的红色通道,你可以这样做

red_image = np.zeros(np.shape(jeju))
red_image[:, :, 0] = jeju[:, :, 0]

plt.imshow(red_image.astype('uint8'))