在python中将平坦序列转换为2d序列

时间:2010-10-10 21:32:08

标签: python image python-imaging-library

我有一段代码会为图像中的每个像素返回一个平面序列。

import Image
im = Image.open("test.png")
print("Picture size is ", width, height)
data = list(im.getdata())
for n in range(width*height):
    if data[n] == (0, 0, 0):
        print(data[n], n)

此代码返回类似

的内容
((0, 0, 0), 1250)
((0, 0, 0), 1251)
((0, 0, 0), 1252)
((0, 0, 0), 1253)
((0, 0, 0), 1254)
((0, 0, 0), 1255)
((0, 0, 0), 1256)
((0, 0, 0), 1257)

前三个值是像素的RGB,最后一个是序列中的索引。 知道图像的宽度和高度以及像素索引如何将该序列转换回2d序列?

2 个答案:

答案 0 :(得分:1)

简单数学:你有n,宽度,高度,想要x,y

x, y = n % width, n / width

或(做同样但效率更高)

y, x = divmod(n, width)

答案 1 :(得分:0)

您可以轻松创建一个模拟二维数据的函数:

def data2d(x,y,width):
  return data[y*width+x]

但是如果你想把数据放在2dish数据结构中,你可以这样做:

data2d = []
for n in range(height):
  datatmp = []
  for m in rante(width):
    datatmp.append(data[n*width+m])
  data2d[n] = datatmp

您可能需要在最后一行进行深层复制。这将使data2d成为列表列表,以便您可以访问行中的像素,列为data[row][column]