Bizzare matplotlib在显示漂浮图像中的行为

2024-06-07 05:08:26 发布

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

当范围(0255)内的常规RGB图像被转换为浮点,然后由matplotlib显示时,该图像显示为负数。如果它被转换为uint8,它将正确显示(当然)。这给我弄清楚发生了什么事带来了一些麻烦,因为我不小心把其中一个图像投射成了float。

我很清楚,当转换为float时,图像应该在范围(0,1)内,并且当除以255时,显示的图像是正确的。但是,为什么在范围(0255)内被转换为浮点的图像会显示为负数?我会期望饱和度(全白)或自动推断范围从输入(从而正确显示)?如果这两种情况都发生了,我就能更快地调试代码。我已经包含了复制行为所需的代码。有人知道为什么会这样吗?

    import numpy as np
    import matplotlib.pyplot as plt
    a = np.random.randint(0,127,(200,400,3))
    b = np.random.randint(128,255,(200,400,3))
    img=np.concatenate((a,b)) # Top should be dark ; Bottom should be light
    plt.imshow(img) # Inverted
    plt.figure()
    plt.imshow(np.float64(img)) # Still Bad. Added to address sascha's comment
    plt.figure()
    plt.imshow(255-img) # Displayed Correctly
    plt.figure()
    plt.imshow(np.uint8(img)) # Displayed Correctly
    plt.figure()
    plt.imshow(img/255.0) # Displays correctly

Tags: 代码图像importimgmatplotlibasnpplt