所以我有这个由 pygame.surfarray.array3d(image)创建的3d数组,它给我一个索引数组作为[width] [height]和第三维有RGB值(R ,G,B)
像这样:array [x] [y] =(0,255,167)
现在,我想将每个RGB列放入一个新的2d数组中(例如,我想创建一个只有R列值的新Red [x] [y]数组,一个新的Green [x] [y]数组只有G列值和一个新的Blue [x] [y]数组,只有B列值)。
它看起来就像这样(在这个例子中我只显示一个值,但我希望这些Red Green和Blue是数组):
红色[x] [y] = 0
绿色[x] [y] = 255
蓝色[x] [y] = 167
我已经尝试将数组[:,0]用于红色,数组[:,1]用于绿色,数组[:,2]用于蓝色但是它不起作用 - 我的猜测是因为这个数组不是一个numpy数组。
非常欢迎任何帮助。谢谢!
答案 0 :(得分:1)
pygame.surfarray.array3d(image)
将返回一个numpy数组的维度 width x height x 3 (其中 3 是三个颜色分量RGB)。您可以使用:
访问维度中的所有元素和整数来访问特定索引处的元素。
例如,要访问图像中的颜色,请为红色array[:, :, 0]
写入,蓝色为array[:, :, 1]
,绿色为array[:, :, 2]
。要访问第16行的蓝色,请编写array[:, 16, 1]
。
如果排除对维度建立索引,则会假定您需要该维度中的所有元素。例如,array[:, :]
与array[:, :, :]
相同,array[4]
与array[4, :, :]
相同。
这是一个简短的例子来回答你的问题。
import pygame
pygame.init()
image = pygame.Surface((4, 4))
image.fill((255, 128, 32))
array = pygame.surfarray.array3d(image)
red_array = array[:, :, 0] # These will now be a 2D-array since we're extracting
green_array = array[:, :, 1] # only one value from the third dimension.
blue_array = array[:, :, 2]
print('Red array: ')
print(red_array)
print('Green array: ')
print(green_array)
print('Blue Array: ')
print(blue_array)
答案 1 :(得分:0)
您可能只想使用循环遍历2D数组的常规方法。
red,green,blue = ([[0]*len(array[0]) for i in range(len(array)),)*3
for i in range(len(array)):
for j in range(len(array[i])):
red[i][j],green[i][j],blue[i][j] = array[i][j]