python - 如何从图像像素阵列创建平均 rgb 向量?
问题描述
我有一张图像,我想将其分成 30 像素 x 30 像素的块。然后,我想平均每个像素的 r、g 和 b 值。因此,例如,一个 900 像素 x 900 像素的块将分成 900 个块(每个块 30 像素 x 30 像素)。然后我想取每个块中 r、g 和 b 值的平均值。最后,我想要一个由 900 个三维向量组成的数组,每个向量代表各自块的平均 r、g、b 值。
我尝试使用 numpy 和枕头来分解块,但我似乎没有正确拼接我的像素阵列。
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 中非常简单。您需要做的就是将图像缩小到 30x30 像素。比例平均 30x30 非重叠像素的块。(或使用 -filter box -resize 代替 -scale)。然后只需使用 txt: 输出格式列出生成的图像的像素值。
创建 900x900 像素的水平渐变:
convert -size 900x900 gradient: -rotate 90 grad.png
缩放图像并列出每个像素:
convert grad.png -scale 30x30 txt:
# ImageMagick pixel enumeration: 30,30,65535,gray
coords: (16-bit rgb values) hex values percent
0,0: (1057,0,64478) #04210000FBDE srgb(2%,0%,98%)
1,0: (3244,0,62291) #0CAC0000F353 srgb(5%,0%,95%)
2,0: (5431,0,60104) #15370000EAC8 srgb(8%,0%,92%)
3,0: (7618,0,57917) #1DC20000E23D srgb(12%,0%,88%)
4,0: (9805,0,55730) #264D0000D9B2 srgb(15%,0%,85%)
5,0: (11992,0,53543) #2ED80000D127 srgb(18%,0%,82%)
6,0: (14179,0,51356) #37630000C89C srgb(22%,0%,78%)
7,0: (16366,0,49169) #3FEE0000C011 srgb(25%,0%,75%)
8,0: (18552,0,46983) #48780000B787 srgb(28%,0%,72%)
9,0: (20739,0,44796) #51030000AEFC srgb(32%,0%,68%)
10,0: (22926,0,42609) #598E0000A671 srgb(35%,0%,65%)
11,0: (25113,0,40422) #621900009DE6 srgb(38%,0%,62%)
12,0: (27300,0,38235) #6AA40000955B srgb(42%,0%,58%)
13,0: (29487,0,36048) #732F00008CD0 srgb(45%,0%,55%)
14,0: (31674,0,33861) #7BBA00008445 srgb(48%,0%,52%)
15,0: (33861,0,31674) #844500007BBA srgb(52%,0%,48%)
16,0: (36048,0,29487) #8CD00000732F srgb(55%,0%,45%)
17,0: (38235,0,27300) #955B00006AA4 srgb(58%,0%,42%)
18,0: (40422,0,25113) #9DE600006219 srgb(62%,0%,38%)
19,0: (42609,0,22926) #A6710000598E srgb(65%,0%,35%)
20,0: (44796,0,20739) #AEFC00005103 srgb(68%,0%,32%)
21,0: (46983,0,18552) #B78700004878 srgb(72%,0%,28%)
22,0: (49169,0,16366) #C01100003FEE srgb(75%,0%,25%)
23,0: (51356,0,14179) #C89C00003763 srgb(78%,0%,22%)
24,0: (53543,0,11992) #D12700002ED8 srgb(82%,0%,18%)
25,0: (55730,0,9805) #D9B20000264D srgb(85%,0%,15%)
26,0: (57917,0,7618) #E23D00001DC2 srgb(88%,0%,12%)
27,0: (60104,0,5431) #EAC800001537 srgb(92%,0%,8%)
28,0: (62291,0,3244) #F35300000CAC srgb(95%,0%,5%)
29,0: (64478,0,1057) #FBDE00000421 srgb(98%,0%,2%)
0,1: (1057,0,64478) #04210000FBDE srgb(2%,0%,98%)
1,1: (3244,0,62291) #0CAC0000F353 srgb(5%,0%,95%)
2,1: (5431,0,60104) #15370000EAC8 srgb(8%,0%,92%)
3,1: (7618,0,57917) #1DC20000E23D srgb(12%,0%,88%)
4,1: (9805,0,55730) #264D0000D9B2 srgb(15%,0%,85%)
5,1: (11992,0,53543) #2ED80000D127 srgb(18%,0%,82%)
6,1: (14179,0,51356) #37630000C89C srgb(22%,0%,78%)
7,1: (16366,0,49169) #3FEE0000C011 srgb(25%,0%,75%)
8,1: (18552,0,46983) #48780000B787 srgb(28%,0%,72%)
9,1: (20739,0,44796) #51030000AEFC srgb(32%,0%,68%)
10,1: (22926,0,42609) #598E0000A671 srgb(35%,0%,65%)
11,1: (25113,0,40422) #621900009DE6 srgb(38%,0%,62%)
12,1: (27300,0,38235) #6AA40000955B srgb(42%,0%,58%)
13,1: (29487,0,36048) #732F00008CD0 srgb(45%,0%,55%)
14,1: (31674,0,33861) #7BBA00008445 srgb(48%,0%,52%)
15,1: (33861,0,31674) #844500007BBA srgb(52%,0%,48%)
16,1: (36048,0,29487) #8CD00000732F srgb(55%,0%,45%)
17,1: (38235,0,27300) #955B00006AA4 srgb(58%,0%,42%)
18,1: (40422,0,25113) #9DE600006219 srgb(62%,0%,38%)
19,1: (42609,0,22926) #A6710000598E srgb(65%,0%,35%)
20,1: (44796,0,20739) #AEFC00005103 srgb(68%,0%,32%)
21,1: (46983,0,18552) #B78700004878 srgb(72%,0%,28%)
22,1: (49169,0,16366) #C01100003FEE srgb(75%,0%,25%)
23,1: (51356,0,14179) #C89C00003763 srgb(78%,0%,22%)
24,1: (53543,0,11992) #D12700002ED8 srgb(82%,0%,18%)
25,1: (55730,0,9805) #D9B20000264D srgb(85%,0%,15%)
26,1: (57917,0,7618) #E23D00001DC2 srgb(88%,0%,12%)
27,1: (60104,0,5431) #EAC800001537 srgb(92%,0%,8%)
28,1: (62291,0,3244) #F35300000CAC srgb(95%,0%,5%)
29,1: (64478,0,1057) #FBDE00000421 srgb(98%,0%,2%)
.
.
.
0,28: (1057,0,64478) #04210000FBDE srgb(2%,0%,98%)
1,28: (3244,0,62291) #0CAC0000F353 srgb(5%,0%,95%)
2,28: (5431,0,60104) #15370000EAC8 srgb(8%,0%,92%)
3,28: (7618,0,57917) #1DC20000E23D srgb(12%,0%,88%)
4,28: (9805,0,55730) #264D0000D9B2 srgb(15%,0%,85%)
5,28: (11992,0,53543) #2ED80000D127 srgb(18%,0%,82%)
6,28: (14179,0,51356) #37630000C89C srgb(22%,0%,78%)
7,28: (16366,0,49169) #3FEE0000C011 srgb(25%,0%,75%)
8,28: (18552,0,46983) #48780000B787 srgb(28%,0%,72%)
9,28: (20739,0,44796) #51030000AEFC srgb(32%,0%,68%)
10,28: (22926,0,42609) #598E0000A671 srgb(35%,0%,65%)
11,28: (25113,0,40422) #621900009DE6 srgb(38%,0%,62%)
12,28: (27300,0,38235) #6AA40000955B srgb(42%,0%,58%)
13,28: (29487,0,36048) #732F00008CD0 srgb(45%,0%,55%)
14,28: (31674,0,33861) #7BBA00008445 srgb(48%,0%,52%)
15,28: (33861,0,31674) #844500007BBA srgb(52%,0%,48%)
16,28: (36048,0,29487) #8CD00000732F srgb(55%,0%,45%)
17,28: (38235,0,27300) #955B00006AA4 srgb(58%,0%,42%)
18,28: (40422,0,25113) #9DE600006219 srgb(62%,0%,38%)
19,28: (42609,0,22926) #A6710000598E srgb(65%,0%,35%)
20,28: (44796,0,20739) #AEFC00005103 srgb(68%,0%,32%)
21,28: (46983,0,18552) #B78700004878 srgb(72%,0%,28%)
22,28: (49169,0,16366) #C01100003FEE srgb(75%,0%,25%)
23,28: (51356,0,14179) #C89C00003763 srgb(78%,0%,22%)
24,28: (53543,0,11992) #D12700002ED8 srgb(82%,0%,18%)
25,28: (55730,0,9805) #D9B20000264D srgb(85%,0%,15%)
26,28: (57917,0,7618) #E23D00001DC2 srgb(88%,0%,12%)
27,28: (60104,0,5431) #EAC800001537 srgb(92%,0%,8%)
28,28: (62291,0,3244) #F35300000CAC srgb(95%,0%,5%)
29,28: (64478,0,1057) #FBDE00000421 srgb(98%,0%,2%)
0,29: (1057,0,64478) #04210000FBDE srgb(2%,0%,98%)
1,29: (3244,0,62291) #0CAC0000F353 srgb(5%,0%,95%)
2,29: (5431,0,60104) #15370000EAC8 srgb(8%,0%,92%)
3,29: (7618,0,57917) #1DC20000E23D srgb(12%,0%,88%)
4,29: (9805,0,55730) #264D0000D9B2 srgb(15%,0%,85%)
5,29: (11992,0,53543) #2ED80000D127 srgb(18%,0%,82%)
6,29: (14179,0,51356) #37630000C89C srgb(22%,0%,78%)
7,29: (16366,0,49169) #3FEE0000C011 srgb(25%,0%,75%)
8,29: (18552,0,46983) #48780000B787 srgb(28%,0%,72%)
9,29: (20739,0,44796) #51030000AEFC srgb(32%,0%,68%)
10,29: (22926,0,42609) #598E0000A671 srgb(35%,0%,65%)
11,29: (25113,0,40422) #621900009DE6 srgb(38%,0%,62%)
12,29: (27300,0,38235) #6AA40000955B srgb(42%,0%,58%)
13,29: (29487,0,36048) #732F00008CD0 srgb(45%,0%,55%)
14,29: (31674,0,33861) #7BBA00008445 srgb(48%,0%,52%)
15,29: (33861,0,31674) #844500007BBA srgb(52%,0%,48%)
16,29: (36048,0,29487) #8CD00000732F srgb(55%,0%,45%)
17,29: (38235,0,27300) #955B00006AA4 srgb(58%,0%,42%)
18,29: (40422,0,25113) #9DE600006219 srgb(62%,0%,38%)
19,29: (42609,0,22926) #A6710000598E srgb(65%,0%,35%)
20,29: (44796,0,20739) #AEFC00005103 srgb(68%,0%,32%)
21,29: (46983,0,18552) #B78700004878 srgb(72%,0%,28%)
22,29: (49169,0,16366) #C01100003FEE srgb(75%,0%,25%)
23,29: (51356,0,14179) #C89C00003763 srgb(78%,0%,22%)
24,29: (53543,0,11992) #D12700002ED8 srgb(82%,0%,18%)
25,29: (55730,0,9805) #D9B20000264D srgb(85%,0%,15%)
26,29: (57917,0,7618) #E23D00001DC2 srgb(88%,0%,12%)
27,29: (60104,0,5431) #EAC800001537 srgb(92%,0%,8%)
28,29: (62291,0,3244) #F35300000CAC srgb(95%,0%,5%)
29,29: (64478,0,1057) #FBDE00000421 srgb(98%,0%,2%)
推荐阅读
- angularjs - AngularJS - 来自变量的模板
- javascript - 扩展时控制台日志中的输出不匹配
- ffmpeg - FFmpeg 放大视频
- javascript - 是否可以将数组中的值添加到对象属性?
- java - 混淆 Java 同步方法、同步(this)和同步类
- json - 如何轻松查看符合“可编码”协议的对象的 JSON 输出
- php - 生成原始 trx 并将其发送到网络显示“交易低估”错误
- java - Autowired 和 Validated 之间的冲突
- python - 使用 selenium 在 python 中处理多个选项卡时出现 IndexError
- amazon-web-services - 如何使用生命周期策略使文件而不是 S3 存储桶中的目录过期?