为什么像这样一排排的图片会使图片变成绿色和蓝色?

2024-06-02 07:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

   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的(9601280,3)是(高度,宽度,rgb),我认为如果我使用[:,:,0],0表示红色。(我认为r=0,g=1,b=2) 但结果不是红色的图片,而是充满了绿色和蓝色的图片。 为什么会发生这种事?在real中[:,:,0]是什么意思


Tags: fromioimportnumpyasnp图片plt
1条回答
网友
1楼 · 发布于 2024-06-02 07:21:28

你是对的,它代表了红色通道。但是,官方文档中的函数imshow指出,对于2d数组,使用标准化和颜色映射将值映射到颜色

如果要绘制红色通道,则只能这样做

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

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

相关问题 更多 >