c++ - 无法使用 OpenCV 4 (C++) 创建 FisherFaceRecognizer
问题描述
我正在学习基于 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);
...
我的 OpenCV 使用 contrib 模块正确编译,包含它们,但它仍然给出错误:
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,该类有一个函数'create',所以我尝试使用它,但这也失败了:
Ptr<face::FaceRecognizer> model = face::FisherFaceRecognizer.create();
error: expected primary-expression before '.' token
这很奇怪,因为该函数的参数具有默认值。我尝试的所有在线解决方案都失败了。较新的 OpenCV 版本发生了什么变化,如何正确创建人脸识别器对象?
解决方案
根据官方文件,
Ptr<FaceRecognizer> createFisherFaceRecognizer(int num_components=0, double threshold=DBL_MAX)
使用的是openCV2。由于您使用的是 openCV 4,因此您必须遵循适用于 openCV 4 的文档。
尝试这个:
static Ptr<FisherFaceRecognizer> cv::face::FisherFaceRecognizer::create (int num_components = 0, double threshold = DBL_MAX )
在此页面的顶部,您可以调整您拥有的 openCV 库的版本。
推荐阅读
- python - Regular Expression to trim number at the end of a string
- kubernetes - Mounting a configuration file structure in job pod
- c - 我正在使用 MinGw 编译器,每当我尝试调试代码时都会出错失败。以及为什么它的位置是 cygwin,因为我正在使用 mingw
- javascript - 悬停在该字段上时如何摆脱闪烁的字段和光标?
- java - Android App 打不开黑屏问题
- python - Clear previous output of widget every time it runs
- sql - Selecting if count for different value is 1 or more
- networking - PPPD over serial, good iperf results, poor real (scp/streaming) bitrate
- python-3.x - Noob Question How would I update a print a function's output without creating a new line in my term in python3?
- django - Django Rest 框架无法避免 Html 实体问题