训练我的分类器时 OpenCV 人脸识别灰度转换错误

OpenCV Face Recognition grayscale conversion error while training my classifier

import numpy as np
import cv2
from skimage.io import imread_collection

dataset = r'C:\Users\JasonPC\Documents\CodeVault\Python\FaceRecognition\dataset\*.jpg' # path for images

List = imread_collection(dataset)
faces_list = np.array(List)

def classifier_trainer(faces_list):
    img_id = 0
    faces = []
    faceID = []
    for face in np.nditer(faces_list):
        gray_face = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY) # coverting color image to gray scale
        np_face = np.array(gray_face, 'uint8') # converting gray image into numpy array
        img_id += 1
        
        faces.append(np_face)
        faceID.append(img_id)
    faceID = np.array(faceID)
    classifier = cv2.face.LBPHFaceRecognizer_create()
    classifier.train(faces, faceID)
    classifier.write('Classifier.yml')

classifier_trainer(faces_list) 

我正在尝试训练分类器来识别我的脸。我被这个非常大的错误困住了。

Traceback (most recent call last):
  File "c:/Users/JasonPC/Documents/CodeVault/Python/FaceRecognition/trainer.py", line 26, in <module>
    classifier_trainer(faces_list)
  File "c:/Users/JasonPC/Documents/CodeVault/Python/FaceRecognition/trainer.py", line 15, in classifier_trainer   
    gray_face = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY) # 
coverting color image to gray scale
cv2.error: OpenCV(4.2.0) c:\projects\opencv-python\opencv\modules\imgproc\src\color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function '__thiscall cv::impl::`anonymous-namespace'::CvtHelper<struct cv::impl::`anonymous namespace'::Set<3,4,-1>,struct cv::impl::A0xe227985e::Set<1,-1,-1>,struct cv::impl::A0xe227985e::Set<0,2,5>,2>::CvtHelper(const class cv::_InputArray &,const class cv::_OutputArray &,int)'
> Invalid number of channels in input image:
>     'VScn::contains(scn)'
> where
>     'scn' is 1 

我想让我的代码做的就是从 numpy 数组中寻找图像,即 face_list 并将其转换为灰度并将其附加到名为 faces

的列表中

问题在于您如何迭代图像。您正在使用 nditer 并且在您的情况下,事实证明它将 n 维数组展平为一维,然后遍历它的所有元素。将其视为一种在没有 n 嵌套循环的情况下迭代 n 维数组的所有元素的方法。所以在这里,循环中的 face 变量是一个整数、浮点数或任何数值,你将它传递给 cvtColor 并收到此错误消息。

如果你想迭代我认为的图像,你可以像这样迭代它们:

for face in faces_list: 
    # your code goes here