向LBPHFaceRecognizer.predict传入ndarray报错,需传入单通道灰度图
解决LBPHFaceRecognizer.predict()的单通道图像错误
错误根源
LBPH算法的特征提取函数elbp仅支持单通道灰度图像,你传入predict()的图像不符合这个要求——错误提示里的"given 2344"大概率是传入了彩色图像(多通道)或形状异常的数组(比如未裁剪的整图、多人脸批量数据)。
修复步骤
将检测到的人脸转为灰度图
不管原图像是彩色还是灰度,对裁剪出的单个人脸区域执行灰度转换:# detected_face是从原图像中裁剪出的单个人脸ROI(numpy.ndarray) gray_face = cv2.cvtColor(detected_face, cv2.COLOR_BGR2GRAY)如果原图像本身就是灰度图,检查其形状:用
print(gray_face.shape)确认是(height, width)(无通道维度),若为(height, width, 1),用gray_face = gray_face.squeeze()去掉多余通道。确保传入单个人脸的灰度图
不要直接传入包含多个人脸的数组,需循环处理每个检测到的人脸:# 示例:多人脸检测+识别流程 faces = face_detector.detectMultiScale(img) for (x, y, w, h) in faces: # 裁剪人脸区域 face_roi = img[y:y+h, x:x+w] # 转灰度 gray_face = cv2.cvtColor(face_roi, cv2.COLOR_BGR2GRAY) # 执行预测 label, confidence = face_recognizer.predict(gray_face) # 处理识别结果(如绘制标签、置信度)验证训练数据格式
训练LBPH模型时使用的图像也必须是单通道灰度图,训练与预测的输入格式必须一致,否则也会引发同类错误。
内容的提问来源于stack exchange,提问作者ANU JEXLINE JOSEPH 21CSME
相关产品推荐
相关产品推荐

