访问获取像素值的相同代码时出错

getting error while accessing the same code for get pixel value

我正在尝试从 numpy ndarray 类型的图像中读取 RGB 像素。我在 2 class 个文件中实现了它。搜索直方图并寻找力矩。第一个过程将首先进行直方图搜索(调用 class histogram),然后继续搜索动量(调用 class momen)。在这两个 classes 中,都有读取输入图像的 RGB 像素的每个过程。我使用以下代码访问 RGB 像素:

def getbyte(self, gambar):
    for i in range(0,gambar.shape[0]):
        for j in range(0,gambar.shape[1]):
            self.p.append(gambar[i,j])
    self.flat = [i for sets in self.p for i in sets]
    
    return self.flat

然后我运行这个程序。如果从流程上看,那么直方图会在momen之前处理。当我运行的时候看console(我用的是spyder IDE),过程已经到了momen搜索线,说明直方图搜索成功了吧?

那么我想问的是,在执行搜索moments的时候,读取图片的RGB像素出现错误,如下:

self.flat = [i for sets in self.pMoment for i in sets]

TypeError: 'numpy.uint8' object is not iterable

奇怪的是,用精确的像素捕获代码搜索直方图时,没有出现错误。但是为什么在搜索momen的时候这段代码有问题,出现错误呢?那是什么错误?

请帮忙

假设self.p属性是一个列表(我的假设是基于所使用的append ()方法)那么错误代码是在循环中向 self.p属性添加一个值.据推测,在展平之前,属性 self.p 应该是列表的列表。但是,在代码中 self.p 仍然是一个整数列表。

所以需要做的就是使用新的变量在每一行中临时存储图像中的像素值。然后这个变量将被添加(append)到 self.p.

代码片段将如下所示:

def getbyte (self, image):
    for i in range (0, image.shape [0]):
        rowPixel = []
        for j in range (0, images.shape [1]):
            rowPixel.append (image [i, j])
        self.p.append (rowPixel)
    self.flat = [i for sets in p for i in sets]
    return self.flat

我已经使用 np.ndarray 类型的二维图像变量尝试了上面的代码。由于我的假设,您正在执行 2 个嵌套循环。