Python是从0开始计数的,也就是说如果你有一个列表(list
),比如:
l = [1, 4, 7, 3, 6]
如果你想用
while循环
(虽然使用
for循环
更好)来遍历一个列表,那么你需要在
索引
小于列表长度
的情况下进行
循环
。因此,
索引
实际上永远不会等于
列表长度
,只会小于等于
列表长度-1
。
遍历上述列表
的代码如下:
i = 0
while i < len(l):
print(l[i])
i += 1
这将会给你以下输出结果
:
1
4
7
3
6
同样的逻辑也适用于您的图像 - 它本质上只是一个二维列表。
这意味着您需要将代码中的“小于或等于”(<=)比较器更正为“小于”(<)。然后您的代码应该按照您想要的方式运行。
因此,以下是已更正的代码:
from PIL import Image
pix = newimage2.load()
print(newimage2.size)
print(" ")
whitevalues = 0
x = 0
while x < newimage2.width:
y = 0
while y < newimage2.height:
print(pix[x,y])
if pix[x,y] == (255,255,255):
whitevalues += 1
y += 1
x += 1
print(whitevalues)
然而,正如我在开头提到的那样,使用for循环
更适合此应用程序,因为它需要更少的代码行并且更符合Python的风格。因此,以下是for循环
的代码,您可能会发现它很有用:
from PIL import Image
pix = newimage2.load()
print(newimage2.size)
print(" ")
whitevalues = 0
for row in newimage2:
for col in row:
print(col)
if col == (255,255,255):
whitevalues += 1
print(whitevalues)
或者,如果你想要极度符合 Python 风格,你可以使用 list-comprehension
来完成这个操作:
whitevalues = sum([1 for r in pix for c in r if c == 1])