代码之家  ›  专栏  ›  技术社区  ›  Stav Alfi

强调图像中的蓝色

  •  1
  • Stav Alfi  · 技术社区  · 6 年前

    我在用 matplotlib 但出于某种原因,我的代码创建了一个意外的图像。

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.misc import imread,imsave
    
    
    # original image
    image1=imread('img.jpg')
    plt.imshow(image1)
    plt.show()
    
    # empesize the blue in that image
    plt.imshow(image1*[0.95,0.95,1])
    plt.show()
    

    结果:

    顶部图像是原始图像,第二个图像(如图所示)是意外结果。

    enter image description here

    似乎不管我输入向量的值是什么,我都会得到同样奇怪的结果。 为什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   ImportanceOfBeingErnest    6 年前

    这个问题与 Getting black plots with plt.imshow after multiplying image array by a scalar 是的。

    你可以比较 image1.dtype ,这是 uint8 ,到 (image1*[0.95,0.95,1]).dtype ,这是 float 是的。

    matplotlib文件 imshow 可以绘制整数值,在这种情况下,它们需要在范围内 [0, 255] 或浮点值,在这种情况下,它们需要在范围内 [0.0, 1.0] 是的。因此,在绘制整数值的原始图像时,可以很好地工作,而由浮点值组成的乘法图像 255. ,超出了允许的范围 [0.0,1.0] 增加25500%。因此它大部分是白色的(因为像素值被裁剪成 1.0 )中。

    解决方法是将值转换回 uint 经过乘法运算,

    image2 = (image1*[0.95,0.95,1]).astype(np.uint8)
    

    或除以 255个。 我是说,

    image2 = (image1*[0.95,0.95,1])/255.
    

    你也可以用 plt.Normalize 喜欢

    image2 = plt.Normalize(0,255)(image1*[0.95,0.95,1])