gpt4 book ai didi

python - 如何使用 NumPy 将单色噪声添加到 PyGame 表面?

转载 作者:行者123 更新时间:2023-11-28 19:26:55 27 4
gpt4 key购买 nike

到目前为止,我已经想出了以下内容:

screen_array = pygame.surfarray.pixels2d(self.screen)
noise_small = numpy.random.random((self.width/4,self.height/4)) * 0.2 + 0.4
noise_big = noise_small .repeat(4, 0).repeat(4, 1)
screen_array *= noise_big

但这会在每个 channel 上增加单独的噪声。

我知道我也可以使用 pygame.surfarray.pixels3d 然后使用 numpy.tile 噪声数组,但这对我来说太慢了(好吧,我我现在做的也很慢,但没关系)。

最佳答案

pygame.surfarray.pixels2d 返回的数组中的每个元素都是通过将 3 个 channel 打包成一个整数获得的数字,我不知道有什么简单的方法可以利用数组结构来进行快速简单的乘法运算。

但是,我仍然认为最好的选择是使用 pygame.surfarray.pixels3d,而不是使用 numpy.tile。你可以这样做:

    screen_array = pygame.surfarray.pixels3d(self.screen)
noise_small = numpy.random.random((self.width/4,self.height/4)) * 0.2 + 0.4
noise_big = noise_small .repeat(4, 0).repeat(4, 1)
screen_array *= noise_big[:, :, numpy.newaxis]

注意 [:, :, numpy.newaxis]。这将 noise_big reshape 为形状 (X, Y, 1) 而不是 (X, Y),这允许与 screen_array 直接相乘> 对象,形状为 (X, Y, 3)。发生这种情况时,第三个轴的单个元素将与所有 3 个 channel 相乘。这种解决问题的方法比使用 numpy.tile 更有效。

关于python - 如何使用 NumPy 将单色噪声添加到 PyGame 表面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8580872/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com