【问题标题】:Im trying to create an image while using a list full of RGB values我试图在使用充满 RGB 值的列表时创建图像
【发布时间】:2016-07-13 17:28:24
【问题描述】:

我正在尝试使用一个充满 RGB 值的列表创建一个图像,其中每个值都是一个像素,我也在使用 numpy,因此我可以通过将其转换为多维数组来编辑列表;但是,当我转换将列表转换为数组,包含 RGB 值的元组变为包含 RGB 值的列表,当我完成编辑数组并将其重新转换为列表时,RGB 值位于列表而不是元组中,因此无法使用作为像素。这是我的代码:

from PIL import Image
import numpy
liste=[(134,234,200),(234,0,255)]
new_array = numpy.array(liste)
final_list=new_array.tolist()
im = Image.new("RGB",(10,10))
im.putdata(final_list)
im.show()

最终名单将是这样的:[[134, 234, 200], [234, 0, 255]] 同时我需要的结果是:[(134,234,200),(234,0,255)](或列表)

【问题讨论】:

  • 因为当我使用我在 numpy 中创建的数组时它给了我一个类型错误。

标签: python arrays list numpy colors


【解决方案1】:

您可以使用list comprehension 将列表列表转换为元组列表,例如:

>>> l = [[1,2,3], [2,3,4], [3,4,5]]
>>> l = [tuple(i) for i in l]
>>> l
[(1, 2, 3), (2, 3, 4), (3, 4, 5)]

【讨论】:

    【解决方案2】:

    map 更快

    from time import clock
    
    spin = 200000
    
    t0 = clock()
    for c in range(spin):
        li = [[134, 234, 200], [234, 0, 255], [122,12,45], [210,50,87], [3,150,250],
              [100,200,0], [230,44,78], [35,78,40], [122,124,231], [251,98,13]]
        li = [tuple(e) for e in li]
    t1 = clock() - t0
    print("%.3f" % t1,"  li = [tuple(e) for e in li]   bgporter")
    
    
    
    t0 = clock()
    for i in range(spin):
        li = [[134, 234, 200], [234, 0, 255], [122,12,45], [210,50,87], [3,150,250],
              [100,200,0], [230,44,78], [35,78,40], [122,124,231], [251,98,13]]
        li = list(map(tuple,li))
    t2 = clock() - t0
    print("%.3f" % t2,"  li = list(map(tuple,li))      eyquem")
    
    print("   %.3f / %.3f =  %d %%" % (t2,t1,(100*t2/t1)))
    

    结果:

    1.150   li = [tuple(e) for e in li]   bgporter
    0.938   li = list(map(tuple,li))      eyquem
       0.938 / 1.150 =  81 %
    

    【讨论】:

      猜你喜欢
      • 2020-01-03
      • 2020-08-23
      • 2014-12-29
      • 2018-06-25
      • 1970-01-01
      • 2012-08-17
      • 2011-02-06
      • 1970-01-01
      • 2018-06-10
      相关资源
      最近更新 更多