OpenCV predict() vs detectMultiScale()

OpenCV predict() vs detectMultiScale()

本文关键字:detectMultiScale vs predict OpenCV      更新时间:2023-10-16

我正在努力使用OpenCV进行一些面部,性别和年龄检测。我有一堆用于训练模型的图像,从本质上讲,我目前有以下内容:

Ptr<cv::face::FaceRecognizer> model = cv::face::LBPHFaceRecognizer::create(9, 9);
std::vector<int> labels;
std::vector<std::string> imageFileNames;
for (int currImageIndex = 0; currImageIndex < imageFileNames.size(); currImageIndex++)
{
    cv::Mat currMatrix;
    std::string currentFileName = imageFileNames[currImageIndex];
    std::string gender;
    int currID = -1;
    //Save the image and the corresponding ID to the list(s).
    currMatrix = imread(currentFileName , CV_LOAD_IMAGE_GRAYSCALE);
    if (currMatrix.data != NULL)
    {
        images.push_back(currMatrix);
        labels.push_back(currID);
    }
}
model->train(images, labels);
model->write("C:\temp.xml");

然后使用temp.xml启发式,我预测基因类似:

gendermodel->predict(currMat, predictedLabel, conf);

但是,我使用detectMultiScale()和A "Cascade Classifier"遇到了此实现。什么是差异?使用Cascade Classifier与我当前这样做的方式有性能优势吗?detectMultiScale()是否工作更好,然后predict()

CascadeClassifier::detectMultiScale函数用于对象检测。它返回一个类型std::vector<cv::Rect>的变量,该变量包含检测到的对象的边界矩形。

FaceRecognizer::predict函数用于对象分类。它返回输入图像的类标签和预测对象的信心。