图像展平像素列表

时间:2016-05-23 21:31:02

标签: python image blender

我想创建一个小的python脚本,将一些数据作为图像文件从混合器内部导出python api。

我找到了一个很好的教程,但有一条线让我感到害怕:

# flatten list
pixels = [chan for px in pixels for chan in px]

pixels是一个大小为4*width*height的浮点数组(rgba-channels)

此行是在使用值填充数组之后和导出图像之前。它有什么作用?为什么我需要"展平"我的像素列表?这甚至意味着什么?

我不知道是否重要(因为我对python来说相对较新),但数组在此行中填充了一个double for循环(对于x和y):pixels[(y * size[0]) + x] = [r, g, b, a]

1 个答案:

答案 0 :(得分:1)

由于我们不知道程序的其余部分是什么,所以我们无法确定为什么需要展平列表。这通常只是带宽问题:您的协议一次只能获取一个强度值,因此它们必须采用线性流。

你拥有的是列表清单,如下所示:

[r1, g1, b1, a1, r2, g2, b2, a2, ...]

拼合意味着将其转换为具有相同顺序的元素的列表,但只有一层深度:

temp = []
for chan in px:
    for px in pixels:
        temp += px
pixels = temp

令你害怕的列表理解是为列表列表执行此操作的简写。从外面读取。我怀疑列表理解中的第一项应该是 px ,而不是

/**
 * @Route("/{entityId}", requirements={"entityId" = "\d+"})
 * @ParamConverter("entity", converter="fos_rest.request_body")
 * @Method("PUT")
 * @Rest\View(statusCode=201)
 */
public function putAction($entityId, Entity $entity, ConstraintViolationListInterface $validationErrors)

这有帮助吗?