什么是将图像转换为RGB值的平面列表的最快方法

时间:2015-08-13 16:34:30

标签: python pillow

我试图将图片转换为rgb值的平面列表。例如,如果我们有(3,3)图像碰巧必须遵循rgb矩阵:

(5,10,12)(13,16,12)(10,14,2)

(6,3,6)(13,14,15)(50,60 210)

(12,15,19)(20,13,27)(100,200,210)

我想快速做的是产生: [5,10,12,13,16,12,10,14,2, 6,3,6,13,14,15,50,60 210, 12,15,19,20,13,27,100,200,210]

这是我目前正在做的事情

def flatten(matrix):
        def decompose(row):
            retrow = []
            for item in row:
                retrow = retrow + item
            return retrow
        retlist = []
        for row in matrix:
            retlist = retlist + decompose(row)
        return retlist
curimg = #load in the pillow img
curimg = np.array(curimg).tolist()
curimg = flatten(curimg)

我正在为机器学习应用程序执行此操作,并且我需要执行此操作的大量图像。我非常确定我的渐近运行时很好,但我想确保我不会这样做不必要地慢。

2 个答案:

答案 0 :(得分:2)

您可以直接压缩numpy数组,而无需复制数据:

flat_img = np.array(curimg).ravel()

答案 1 :(得分:0)

根据我的理解,我认为您可以使用[chain][1]中的itertools,如下所示:

my_tuple = [(5, 10, 12),(13, 16, 12),(10, 14, 2),(6, 3, 6), (13, 14, 15), (50, 60, 210),(12, 15, 19), (20, 13, 27), (100, 200, 210)]

from itertools import chain

x = chain(*my_tuple)
print list(x)

OUTPUT:
[5, 10, 12, 13, 16, 12, 10, 14, 2, 6, 3, 6, 13, 14, 15, 50, 60, 210, 12, 15, 19, 20, 13, 27, 100, 200, 210]
相关问题