Pygame:从多个图像的平均混合中获取图像

问题描述 投票:0回答:1

我在列表中有许多具有相同分辨率的图像...它们是从代码中生成并绘制的

pygame.Surface
虽然这不应该与这个问题相关,但会提到它们是多重采样系统,每个图像代表一个渲染。我想将它们合并成一个图像,生成的图像是所有通道(RGBA)上所有图像的平均值。我怎样才能最有效地实现这一目标?

显然,我不能将两者作为

img1.blit(img2, (0, 0))
进行位图传输,因为后面的图像将完全覆盖前面的图像。我确实将 alpha 通道用于其他目的,它允许在之前的结果之上以较低的透明度混合未来的图像,但这并不准确,因为我想要一个真实的平均值,而后面的图像不会根据基于变量的量来覆盖结果顺序:我不希望结果看起来像
img1.* / 2 + img2.* / 2 + img3.* / 2
,而是
(img1.* + img2.* + img3.*) / 3

我知道我可以手动扫描每个图像中的像素,但这将是非常性能密集型的:我更喜欢使用不太准确的 alpha 混合,而不是必须用它来主循环。请告诉我您所知道的最接近的解决方案是什么。

python python-3.x pygame
1个回答
0
投票

但这会非常消耗性能

我完全不明白你的话。

首先导入

import numpy as np

然后从这三个图像中获取像素:

    img1 = np.array( ... )  # wherever you're storing the pixels
    img2 = ...
    img3 = ...
    assert img1.shape == img2.shape == img3.shape
    assert img1.shape[1] == 3  # three color channels -- consider dropping the alpha channel

现在你已经准备好了,正如OP建议的那样, 但矢量化速度非常快:

    mean_img = (img1 + img2 + img3) / 3.
© www.soinside.com 2019 - 2024. All rights reserved.