matplotlib中的低对比度图像(对比度拉伸)问题

nei*_*esc 2 python matplotlib pillow

阅读低对比度图像时,它会自动采用以下示例:

In [1]: from PIL import Image
In [2]: import numpy as np
In [3]: import matplotlib.pyplot as plt
In [4]: img = Image.open('images/map.jpg')
In [5]: arr = np.asarray(img)
In [6]: plt.gray()
In [7]: plt.imshow(arr)
Out[7]: <matplotlib.image.AxesImage at 0x7f9c7e88f490>
In [8]: plt.show()
Run Code Online (Sandbox Code Playgroud)

输入

输入

情节(没有改变,这是matplotlib自动.)

情节

因为这个输入不同于情节,没有修改任何东西.

我需要低对比度图像来实现对比拉伸的算法

阅读亚马逊数字图像处理书(Rafael C. Gonzalez,Richard E. Woods)

PS:matplotlib正在转换自动.我不需要.

tom*_*m10 8

如果您不想自动缩放色彩映射,可以使用vminvmax设置您喜欢的范围,如下所示:

plt.imshow(arr, vmin=0, vmax=255)
Run Code Online (Sandbox Code Playgroud)

当显示一个numpy数组时,matplotlib只能自动知道实际输入数据的范围(不是它取自的范围),因此需要将完整的输入范围映射到完整的输出范围.但是,如果您知道不同范围的输入数据,则可以使用vminvmax指定它.

  • @neiesc `imshow` 默认使用 `vmin=min(arr)` 和 `vmax=max(arr)`。您通常对输入值有所了解,例如最大和最小 _possible_ 值。如果您的输入数据是 unit8,则最小值为 0,最大值为 255。 (2认同)