标量乘法不使用图像矢量

时间:2016-06-12 16:20:40

标签: python numpy python-imaging-library

我已导入图像并将其转换为矢量,现在我想将其乘以标量。我的行为很奇怪。

import numpy
import Image

image = Image.open("./yalefaces/subject01.gif").convert("L")
vector = numpy.asarray(image).flatten()
print vector
print vector * 2

我得到的回应:

[130 130 130 ...,  68  68  68]
[  4   4   4 ..., 136 136 136]

为什么我没有得到预期的结果,[260 260 260 ..., 136 136 136]

2 个答案:

答案 0 :(得分:0)

问题在于,当我在图片上调用numpy.asarray时,我会得到uint8 - s的向量。我得到4的原因我期望2 * 130 = 260是因为4是260模256.解决方案是投射到,例如,浮点数:

 vector = vector.astype(numpy.float32)
 vector = vector * 2

如果我想保存生成的图像,我需要将向量转换回uint8:

 vector = vector.astype(numpy.uint8)
 i = Image.fromarray(vector, "L")
 i.save("out.gif")

答案 1 :(得分:-1)

这应该可以满足您的需求:

numpy.multiply(vector,2)