#c #opencv #opencv3.0 #face-recognition #opencv-contrib
#c #opencv #opencv3.0 #распознавание лиц #opencv-contrib
Вопрос:
Я следую более старому руководству по распознаванию лиц на основе OpenCV на C , и у меня ошибка, которую я не могу устранить. Соответствующий фрагмент кода:
#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 и как я могу правильно создать объект распознавания лиц?
Ответ №1:
Согласно официальному документу,
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, которая у вас есть.
Комментарии:
1. Это помогло мне, спасибо! Интересно, почему мой поиск в Google не выдал этого…