我已导入图像并将其转换为矢量,现在我想将其乘以标量。我的行为很奇怪。
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]
?
答案 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)