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