OpenCV predict() 与 detectMultiScale()
OpenCV predict() vs detectMultiScale()
我正在使用 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);
但是,我遇到了 this implementation 使用 detectMultiScale()
和 "Cascade Classifier"
。有什么不同?使用 Cascade Classifier
与我目前使用的方式相比有性能优势吗? detectMultiScale()
是否比 predict()
更好?
CascadeClassifier::detectMultiScale
函数用于对象检测。它 returns 一个 std::vector<cv::Rect>
类型的变量,其中包含检测到的对象的边界矩形。
FaceRecognizer::predict
函数用于对象 classification。它 returns 输入图像的 class 标签和预测对象的置信度。
我正在使用 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);
但是,我遇到了 this implementation 使用 detectMultiScale()
和 "Cascade Classifier"
。有什么不同?使用 Cascade Classifier
与我目前使用的方式相比有性能优势吗? detectMultiScale()
是否比 predict()
更好?
CascadeClassifier::detectMultiScale
函数用于对象检测。它 returns 一个 std::vector<cv::Rect>
类型的变量,其中包含检测到的对象的边界矩形。
FaceRecognizer::predict
函数用于对象 classification。它 returns 输入图像的 class 标签和预测对象的置信度。