AttributeError: 'numpy.ndarray'对象没有'append'属性:图像处理示例

2 投票
2 回答
33384 浏览
提问于 2025-04-18 15:10

我先来解释一下我想做的事情。我有一张图片,我想把某个特定区域的像素值存起来。为此,我实现了以下这个循环(是在网站的另一个话题中找到的):

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]

撰写回答