我做了一个应用来检测面部并在脸部周围画一个矩形。问题是它只检测某个位置的面,也就是说,我可以检测到某个位置有单元格的面,但是当我转动它时会停止检测。
我想知道是否有一种算法允许我检测任何位置的面部,无论是躺着,面朝上等......
我正在使用frontalFace.xml的xml。
vector< Rect > detectedFaces;
detectedFaces.clear();
frontalFaceClassifier.detectMultiScale( dst, detectedFaces,
1.5, 3, 2 | CV_HAAR_SCALE_IMAGE , Size(90,90) );
qDebug()<<"Cantidad de caras en el vector : " << detectedFaces.size();
if( detectedFaces.size() > 0 ){
actualFace = detectedFaces.at( 0 );
countDetectedFaces++;
qDebug()<<"**********qwerty**********"<<detectedFaces.size()<<"----------";
}
for(int i=0;i<detectedFaces.size();i++)
{
// Dibujar un cuadrado en la zona en donde se detecta la cara.
Rect dibujarCuadrado = detectedFaces.at(i);
cv::rectangle (mat, dibujarCuadrado, 20, 1, LINE_8, 0);
}
答案 0 :(得分:1)
您似乎并不清楚自己在做什么。这不是关于算法而是关于分类。
您需要使用所需的一组信息训练您的分类器。 OpenCV为您提供预先训练的集合,例如XML文件中的“正面”和“剖面”,因此首先开始运行带有正面和剖面的svm,然后执行一些过滤以从结果中删除重叠。
如果您想为识别器添加其他功能,则需要自行训练。