2

我分离了彩色图像的 3 个通道。我创建了一个与图像大小相同的新 NumPy 数组,并将图像的 3 个通道存储到 3D NumPy 数组的 3 个切片中。绘制 NumPy 数组后,绘制的图像与原始图像不同。为什么会这样?

img和数组都有new_img相同的元素,但图像不同。

    import matplotlib.image as mpimg
    import matplotlib.pyplot as plt
    import numpy as np

    img=mpimg.imread('/storage/emulated/0/1sumint/kali5.jpg')

    new_img=np.empty(img.shape)

    new_img[:,:,0]=img[:,:,0]
    new_img[:,:,1]=img[:,:,1]
    new_img[:,:,2]=img[:,:,2]

    plt.imshow(new_img)
    plt.show()

期望与原始图像相同的图像。

4

1 回答 1

2

问题是您的新图像将使用float64此行的默认数据类型创建:

new_img=np.empty(img.shape)

除非您指定不同的dtype.

您可以(最好)复制原始图像,dtype如下所示:

new_img = np.empty(im.shape, dtype=img.dtype)

或使用这样的东西:

new_img = np.zeros_like(im) 

或者(最坏的)指定一个你碰巧知道的匹配你的数据,像这样,

new_img = np.empty(im.shape, dtype=np.uint8)

我认为您有理由一次复制一个频道,但如果没有,您可以避免上述所有问题,只需执行以下操作:

new_img = np.copy(img)
于 2019-07-18T15:59:45.757 回答