&引用;类型错误:';int';“对象不可编辑”;当我试图在python中使用getpixel()时

&引用;类型错误:';int';“对象不可编辑”;当我试图在python中使用getpixel()时,python,python-imaging-library,Python,Python Imaging Library,我试图运行一个python脚本(Python2.6),其中包含如下代码 import Image def is_grey_scale(img_path="lena.jpg"): im = Image.open(img_path) w,h = im.size for i in range(w): for j in range(h): r,g,b,_ = im.getpixel((i,j)) if r != g

我试图运行一个python脚本(Python2.6),其中包含如下代码

import Image

def is_grey_scale(img_path="lena.jpg"):
    im = Image.open(img_path)
    w,h = im.size
    for i in range(w):
        for j in range(h):
            r,g,b,_ = im.getpixel((i,j))
            if r != g != b:
                return False

    return True
它正在报告以下定义的错误

r,g,b, _ = im.getpixel((i, j))
TypeError: 'int' object is not iterable

您能告诉我这里的错误是什么吗。

情况如下

您正在尝试将从
im.getpixel((i,j))
返回的结果解压缩为4个变量
r,g,b,

为了实现这一点,
im.getpixel
必须返回一个列表、一个元组或另一个iterable,这将只为变量提供4个值。或多或少地提供会产生问题


但是在您的例子中,函数
im.getpixel((i,j))
返回一个
int
,这无论如何都不是一个可数,因此它会抱怨。

方法的定义是

    def getpixel(self, xy):
        """
        Returns the pixel value at a given position.

        :param xy: The coordinate, given as (x, y).
        :returns: The pixel value.  If the image is a multi-layer image,
            this method returns a tuple.

您的图像是“多层图像”吗?我假设在所有的图像处理课程中都使用相同的图像

或者您可以尝试
a,b,c=1
,您将得到
类型错误
,正如答案所示。@msvalkon您的案例在示例中是有效的,但您肯定会返回一个iterable。但正如Huu Nguyen所指出的,分配
a,b=1
,你会得到
TypeError
为了完整性,如果你想访问像素的
r,b,g
值,你必须将图像转换成RGB或RGBA图像。有关更多详细信息,请参见此。