【问题标题】:Why is python throwing error : AttributeError: 'numpy.ndarray' object has no attribute 'append'?为什么python抛出错误:AttributeError:'numpy.ndarray'对象没有属性'append'?
【发布时间】:2020-12-29 11:59:00
【问题描述】:

我正在尝试运行以下代码,但 python 抛出错误,即 numpy has no argument 'append' for the line that says:"ids.append(id)"

path = [os.path.join("data", f) for f in os.listdir("data")]
faces = []
ids = []

for image in path :
    img = Image.open(image).convert('L')
    nimg = np.array(img, 'uint8')
    id = int(os.path.split(image)[1].split(".")[1])
    faces.append(nimg)
    ids.append(id)
    ids = np.array(ids)
clf = cv2.face.EigenFaceRecognizer_create()
clf.train(faces, ids)
clf.write("classifier.yml")

【问题讨论】:

  • ids = np.array(ids) 可能应该在循环之外,如果需要的话。通常,将不同类型重新分配给同一个变量应该涉及双重考虑。
  • @user2864740。谢谢。它现在工作了

标签: python numpy opencv opencv3.0 numpy-ndarray


【解决方案1】:

您在第一次迭代后将 id 转换为数组。运行它时,数组中应该只有一项。我会将行 ids = np.array(ids) 移到 for 循环之外。见下文:

path = [os.path.join("data", f) for f in os.listdir("data")]
faces = []
ids = []

for image in path :
    img = Image.open(image).convert('L')
    nimg = np.array(img, 'uint8')
    id = int(os.path.split(image)[1].split(".")[1])
    faces.append(nimg)
    ids.append(id)

ids = np.array(ids)
clf = cv2.face.EigenFaceRecognizer_create()
clf.train(faces, ids)
clf.write("classifier.yml")

如果你想真正让它成为一个数组,你必须使用下面的样式代码,但列表也应该没问题。

ids = np.array(ids)
ids = np.append(ids, [id])

【讨论】:

    猜你喜欢
    • 2017-08-14
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2018-06-22
    • 2015-08-16
    • 2015-03-08
    • 1970-01-01
    • 2020-10-22
    相关资源
    最近更新 更多