我正在使用PIL编写一个Python程序,它需要为每个像素找到该像素5个像素范围内所有像素的值。为了找到所有这些像素的位置,我编写了以下代码:
#w and h are dimensions of the image
for y in range(h):
for x in range(w):
#find neighboring pixels
neighbors = [(x+x2,x+y2) for x2 in range(-5,5) for y2 in range(-5, 5)]
for i, (x2, y2) in enumerate(neighbors):
if x2 < 0 or y2 < 0:
neighbors.pop(i)
if x2 > w or y2 > h:
neighbors.pop(i)
从理论上讲,它会找到5个像素内的所有值,然后消除那些无效的值。然而,即使在第一个像素(0,0)
上,也不是所有的负片都被消除了,我稍后会得到一个IndexError
。似乎当我遍历neighbors
时,它并没有传递neighbors
中的每一项。为什么会这样,我怎样才能纠正它?你知道吗
问题可能是,您在遍历列表时更改了列表。因此,我将直接创建一个只包含允许条目的列表,而不是创建此列表并在之后删除非法条目。
为此,您可以在列表中使用
if
语句:消除非法条目的另一个选择是使用另一个列表。然后您可以使用与生成邻居相同的代码并删除非法条目,如下所示:
相关问题 更多 >
编程相关推荐