pyplot显示不正确,图像太暗

时间:2019-04-27 18:18:39

标签: python matplotlib image-processing jupyter-notebook

我正在处理图像处理问题。

我创建了一个将盐和胡椒粉噪声应用到图像的函数。 这是函数:

def sp_noise(image,prob):

    res = np.zeros(image.shape,np.uint8)
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            rdn = random.random()
            if rdn < prob:
                rdn2 = random.random()
                if rdn2 < 0.5:
                    res[i][j] = 0
                else:
                    res[i][j] = 255
            else:
                res[i][j] = image[i][j]
    return res

我想显示结果时出现问题。

wood = loadPNGFile('wood.jpeg',rgb=False)
woodSP = sp_noise(bois,0.01)

plt.subplot(1,2,1)
plt.imshow(bois,'gray')
plt.title("Wood")
plt.subplot(1,2,2)
plt.imshow(woodSP,'gray')
plt.title("Wood SP")

我无法直接发布图片,但这是链接:

image

图片较暗。但是当我显示像素值时

但是当我显示两幅图像之间的像素值时,它们的值是相同的:

[[ 99  97  96 ... 118  90  70]
 [110 110 103 ... 116 115 101]
 [ 79  73  65 ...  96 121 121]
 ...
 [ 79  62  46 ... 105 124 113]
 [ 86  98 100 ... 114 119  99]
 [ 96  95  95 ... 116 111  90]]
[[255  97  96 ... 118  90  70]
 [110 110 103 ... 116 115 101]
 [ 79  73  65 ...  96 121 121]
 ...
 [ 79  62  46 ... 105 124 113]
 [ 86  98 100 ... 114 119  99]
 [ 96  95  95 ... 116 111  90]]

我还要检查平均值:

117.79877369007804
117.81332616658703

显然问题出在显示器plt.imshow,但我找不到解决方法

1 个答案:

答案 0 :(得分:1)

imshow的{​​{3}},有2个可选参数vminvmax,其中:

  

在使用标量数据且没有明确规范的情况下,vmin和vmax定义   颜色图覆盖的数据范围。默认情况下,颜色图覆盖   提供的数据的完整值范围。 vmin,vmax被忽略   如果使用了norm参数。

因此,如果没有为这些参数指定值,则发光度的范围将基于实际数据值,其中最小值设置为黑色,最大值设置为白色。如您所见,这在可视化中很有用,但在比较中却没有用。因此,只需将vminvmax设置为适当的值(可能为0和255)。