无法使用 OpenCV 4 (C++) 创建 FisherFaceRecognizer

Cannot create FisherFaceRecognizer with OpenCV 4 (C++)

我正在学习基于 C++ 中的 OpenCV 的人脸识别的旧教程,但遇到一个我无法解决的错误。相关代码片段:

#include "opencv2/core/core.hpp"
#include "opencv2/face.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
...
Ptr<face::FaceRecognizer> model = face::createFisherFaceRecognizer();
model->train(images, labels);
...

我已经使用 contrib 模块正确编译了我的 OpenCV,包含了它们,但它仍然给出错误:

error: 'createFisherFaceRecognizer()' is not a member of 'cv::face'

我也试了这个:

Ptr<face::FaceRecognizer> model = face::FisherFaceRecognizer_create();
error: 'FisherFaceRecognizer_create()' is not a member of 'cv::face'

我查了 face.hpp,发现 class 有一个函数 'create',所以我尝试使用它,但这也失败了:

Ptr<face::FaceRecognizer> model = face::FisherFaceRecognizer.create();
error: expected primary-expression before '.' token

这很奇怪,因为该函数的参数具有默认值。我尝试过的所有在线解决方案都失败了。较新的 OpenCV 版本中发生了什么变化,我如何才能正确创建人脸识别器对象?

根据official document,

Ptr<FaceRecognizer> createFisherFaceRecognizer(int num_components=0, double threshold=DBL_MAX)

使用的是openCV2。由于您使用的是 openCV 4,因此您必须遵循适用于 openCV 4 的 documentation

试试这个:

static Ptr<FisherFaceRecognizer> cv::face::FisherFaceRecognizer::create (int    num_components = 0, double  threshold = DBL_MAX )

this page的顶部,您可以调整您拥有的openCV库的版本。