对于一个项目,我需要从图像中获取RGBA值,并在以后的计算中使用它们。为此,我一直在使用即时获取数据()因为这给了我列表中列表格式的值,所以我编写了一些代码将其放入一个长列表中。在
for group in pix_val:
for item in group:
pix_val_flat.append(item)
这对我来说非常有效,直到我用一个完全白色的图像测试了代码。它没有在一个列表中生成4个值的集合,而是给了我一个长列表——这意味着当我的程序试图使列表变平时,我会出错。有人知道为什么会这样吗?我该怎么解决?在
这是我的代码:
^{pr2}$以下是错误消息:
Traceback (most recent call last):
File "/program", line 286 in <module>
for item in group:
TypeError: 'int' object is not iterable
尝试类似
list(im.getdata())
或numpy.array(im.getdata())
(第一个可能更好)它以某种方式返回一个长列表而不是一个列表列表,这可能会减轻这种情况。另一个选择是使用类似imageio.imread(filename)
的东西,它以numpy数组而不是序列的形式返回像素值。然后,可以像在任何其他数组中一样引用数组维度。(例如,image[:, :, 0]
会给你所有的R值。)编辑了我的代码行,现在可以工作了:
为什么不直接使用
img.load()
它使处理单个像素更容易。在相关问题 更多 >
编程相关推荐