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


import numpy as np
import cv2
from skimage.io import imread_collection
dataset = r'C:UsersJasonPCDocumentsCodeVaultPythonFaceRecognitiondataset*.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:projectsopencv-pythonopencvmodulesimgprocsrccolor.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维数组展平为1维,然后迭代它的所有元素。可以将其视为在没有n嵌套循环的情况下对n维数组的所有元素进行迭代的一种方式。因此,在这里,循环中的face变量是一个整数、浮点值或任何数值,您将其传递给cvtColor并得到此错误消息。

如果你想迭代图像,我想,你可以这样迭代:

for face in faces_list: 
# your code goes here

最新更新