gpt4 book ai didi

python - 如何从图像像素阵列创建平均 rgb 向量?

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:10 24 4
gpt4 key购买 nike

我有一张图片,我想将其分成 30 像素 x 30 像素的 block 。然后,我想对像素的每个 r、g 和 b 值进行平均。因此,例如,900px x 900px 将分成 900 个 block (每个 30px x 30px)。然后我想取每个 block 中 r、g 和 b 值的平均值。最后,我想要一个包含 900 个三维向量的数组,每个向量代表各自 block 的平均 r、g、b 值。

我试过使用 numpy 和 pillow 来分解 block ,但我似乎没有正确拼接我的像素阵列。

import numpy as np
from PIL import Image

item_image = Image.open("1.jpg")
pixel_array = np.asarray(item_image)
width, height = item_image.size
blocks = []

BLOCK_WIDTH = 30
BLOCK_HEIGHT = 30

row_start = 0
row_end = BLOCK_HEIGHT
column_start = 0
column_end = BLOCK_WIDTH
print(len(pixel_array))
while row_end < height:
while column_end < width:
row = slice(row_start, row_end)
col = slice(column_start, column_end)
blocks.append(pixel_array[ row , col ])
column_start += BLOCK_WIDTH
column_end += BLOCK_WIDTH
row_start += BLOCK_HEIGHT
row_end += BLOCK_HEIGHT

averaged_blocks = []

for i in range(BLOCK_HEIGHT):
for j in range(BLOCK_WIDTH):
averaged_blocks.append(np.mean(blocks[i][j], axis = 0))


我在处理图像方面还很陌生,所以如果有人有任何建议或建议,我将不胜感激!

最佳答案

正如您所说,您乐于接受建议,您可以使用一行 ImageMagick 实现您在 shell 中提出的要求,大多数 Linux 发行版都安装了它,并且可用于 macOS 和 Windows。

因此,在 shell 或命令提示符中,获取图像,将其拆分为 30x30 的图 block ,通过将大小调整为 1x1 来平均每个图 block 的内容,将所有 1x1 均值附加到新的单行图像并在显示时打印该图像的每个像素作为文本格式的 8 位:

magick image.png -crop 30x30 -resize 1x1\! +append -depth 8 txt:

示例输出

# ImageMagick pixel enumeration: 900,1,65535,rgb
0,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
1,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
2,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
3,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
4,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
5,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
6,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
7,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
8,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
9,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
10,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
11,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
12,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
13,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
14,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
15,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
16,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
17,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
18,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
19,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
20,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
21,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
22,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
23,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
24,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
25,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
26,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
27,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
28,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
29,0: (82.2696,63142.9,82.2696) #00F600 rgb(0,246,0)
30,0: (254.322,58412.4,254.322) #01E301 rgb(1,227,1)
31,0: (254.322,58412.4,254.322) #01E301 rgb(1,227,1)
32,0: (254.322,58412.4,254.322) #01E301 rgb(1,227,1)

关于python - 如何从图像像素阵列创建平均 rgb 向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57198115/

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