【问题标题】:Trouble with pyplot displaying resized images in pythonpyplot 在 python 中显示调整大小的图像时出现问题
【发布时间】:2015-05-01 22:16:19
【问题描述】:

这是我的第一个堆栈溢出问题,如果不是很好,请纠正我:

我目前正在 python 2.7 中将一堆灰度图像处理为 numpy ndarrays (dtype=uint8)。当我使用resized=misc.imresize(image,.1) 调整图像大小时,当我使用 pyplot 绘制它时,生成的图像有时会显示为不同的灰度级。这是我的代码的样子。我会发布结果的图片,但我还没有声誉积分:

import cv2
from scipy import misc
from matplotlib import pyplot as plt
image=cv2.imread("gray_image.tif",cv2.CV_LOAD_IMAGE_GRAYSCALE)
resize=misc.imresize(image,.1)
plt.subplot(1,2,1),plt.imshow(image,"gray")
plt.subplot(1,2,2),plt.imshow(resize,"gray")
plt.show()

如果我将图像写入文件,灰度显示正常。
如果我使用 numpy 比较平均灰度: np.average(image)np.average(resized), 正如人们所期望的那样,平均灰度值大致相同。 如果我用 cv2.imshow 显示图像,灰度显示正常。

这不仅是调整图像大小的问题,而且当我将图像添加在一起时(当一个图像的大部分是黑色并且不应该使结果图像变暗时),以及当我构建图像像素时,灰度也会变得扭曲-逐像素,例如:

import numpy as np
image_copy = np.zeros(image.shape)
for row in range(image.shape[0]):
    for col in range(image.shape[1]):
        image_copy[row,col]=image[row,col]
plt.imshow(image_copy,"gray") #<-- Will sometimes show up darker than original image
plt.show()

有人知道会发生什么吗?

对于这个问题的冗长和不够明确,我深表歉意。

【问题讨论】:

    标签: python opencv numpy matplotlib scipy


    【解决方案1】:

    imshow 会自动缩放颜色信息以适应整个可用范围。调整大小后,颜色范围变小,导致外观颜色发生变化(但不是实际值,这解释了为什么保存的图像效果很好)。

    您可能想告诉imshow 不要缩放您的颜色。这可以使用vminvmax 参数作为explained in the documentation 来完成。您可能想使用 plt.imshow(image, "gray", vmin=0, vmax=255) 之类的东西来实现不变的外观。

    【讨论】:

    • 啊,谢谢。一旦我将 vmin 和 max 值设置为原始图像的 vmin 和 max 值,颜色就会显示相同。
    • 这可能是一个不同的问题,但是当我应用其他操作时,例如 Kuwahara 过滤器,或者我尝试提取某个灰度范围内的像素值时,它们使用的是表观值而不是实际值值,所以这告诉我问题超出了pyplot。还有其他方法可以解决颜色缩放问题吗?
    • 我不确定我是否理解您的问题。你能打开另一个堆栈溢出问题,最好是示例代码和/或图像?
    • 我解决了这个问题,但我还是发布了另一个问题,因为我不确定解决方案为什么有效。 Here is the link.
    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    相关资源
    最近更新 更多