如何从相机的所有位置使用opencv检测Android的面孔?

时间:2017-10-19 18:27:32

标签: android c++ qt opencv

我做了一个应用来检测面部并在脸部周围画一个矩形。问题是它只检测某个位置的面,也就是说,我可以检测到某个位置有单元格的面,但是当我转动它时会停止检测。

我想知道是否有一种算法允许我检测任何位置的面部,无论是躺着,面朝上等......

我正在使用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);
    }

1 个答案:

答案 0 :(得分:1)

您似乎并不清楚自己在做什么。这不是关于算法而是关于分类。

您需要使用所需的一组信息训练您的分类器。 OpenCV为您提供预先训练的集合,例如XML文件中的“正面”和“剖面”,因此首先开始运行带有正面和剖面的svm,然后执行一些过滤以从结果中删除重叠。

如果您想为识别器添加其他功能,则需要自行训练。