我正在使用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()
结果:
上面的图像是原始图像,而第二个图像(如图所示)是意外结果。
看来,无论我向向量输入什么值,都会得到相同的奇怪结果。 为什么?
答案 0 :(得分:2)
此问题与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]
范围内)或float值(在这种情况下,它们必须在[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])