强调图像中的蓝色

时间:2018-07-17 20:51:13

标签: python image matplotlib image-processing

我正在使用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 个答案:

答案 0 :(得分:2)

此问题与Getting black plots with plt.imshow after multiplying image array by a scalar密切相关。

您可以将image1.dtypeuint8进行比较,将(image1*[0.95,0.95,1]).dtypefloat进行比较。

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])