【问题标题】:Scalar multiplication not working with image vector标量乘法不适用于图像矢量
【发布时间】:2016-06-12 16:20:39
【问题描述】:

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

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]

【问题讨论】:

    标签: python numpy python-imaging-library


    【解决方案1】:

    问题是当我在图像上调用numpy.asarray 时,我得到一个uint8-s 的向量。我在期望 2*130 = 260 的地方得到 4 的原因是因为 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")
    

    【讨论】:

      【解决方案2】:

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

      numpy.multiply(vector,2)
      

      【讨论】:

      • 不,我仍然得到错误的结果。 vectorndarray 是否相关?
      猜你喜欢
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多