AttributeError: 'numpy.ndarray'对象没有'append'属性:图像处理示例
我先来解释一下我想做的事情。我有一张图片,我想把某个特定区域的像素值存起来。为此,我实现了以下这个循环(是在网站的另一个话题中找到的):
pixels = im.load()
all_pixels = []
for x in range(SpecificWidth):
for y in range(SpecificHeight):
cpixel = pixels[x, y]
all_pixels.append(cpixel)
但是,这个循环并没有返回一个特定宽度乘以特定高度的矩阵,而是返回了一个长度和像素值一样多的数组。因为我想保持这个特定区域矩阵的大小,所以我实现了下面这个循环(和之前的差不多):
array=np.array(all_pixels)
roi_pixels = np.zeros((SpecificWidth,SpecificHeight))
for i in range(0,array.shape[0],width):
c_roi_pixels=all_pixels[i]
roi_pixels.append(c_roi_pixels)
结果我遇到了标题中提到的错误。
2 个回答
4
在numpy中,append
是一个函数,而不是方法。
所以你应该这样使用:
roi_pixels = np.append(roi_pixels, c_roi_pixels)
请注意,append
函数会创建并返回一个副本!它不会改变原来的数据。
2
@RolandSmith 说得完全正确,你看到的错误信息的原因就是这样。要更有效地完成你想做的事情,可以先把整个图片转换成一个 numpy 数组,然后用切片索引来获取与你感兴趣区域(ROI)对应的像素:
# convert the image to a numpy array
allpix = np.array(im)
# array of zeros to hold the ROI pixels
roipix = np.zeros_like(allpix)
# copy the ROI region using slice indexing
roipix[:SpecificHeight, :SpecificWidth] = allpix[:SpecificHeight, :SpecificWidth]