1

我的 Android 应用程序使用 javaCV 并使用 LBP 级联调用 detectMultiScale() 函数来检测人脸。它在我的模拟器上运行良好。然而,当我尝试在我的 HTC Incredible S 上测试它时,它返回 0,无法检测到任何人脸!谁能告诉我一些提示为什么它不起作用?非常感谢您的帮助!!!

这是我的人脸检测代码:

    CASCADE_FILE = working_Dir.getAbsolutePath() + "/lbpcascade_frontalface.xml";

    public static CvRect getFaceWithLBP(IplImage grayFaceImg)
    {
         CascadeClassifier cascade = new CascadeClassifier(CASCADE_FILE);
         CvRect facesdetection = new CvRect(null);

         cascade.detectMultiScale(grayFaceImg, facesdetection, 1.1, 2, CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH, 
                             new CvSize(), new CvSize(grayFaceImg.width(), grayFaceImg.height()));  

         return facesdetection;
    }
4

1 回答 1

1

请注意,根据OpenCV 文档,标志(例如 CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH)不能与新的级联(如 LBP 级联)一起使用。

void CascadeClassifier::detectMultiScale(const Mat& image, vector& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size()) 参数:

  • cascade – Haar 分类器级联(仅限 OpenCV 1.x API)。它可以使用 Load() 从 XML 或 YAML 文件中加载。当不再需要级联时,使用 cvReleaseHaarClassifierCascade(&cascade) 释放它。
  • image – CV_8U 类型的矩阵,包含检测到对象的图像。
  • objects - 矩形向量,其中每个矩形都包含检测到的对象。
  • scaleFactor – 指定每个图像比例缩小图像大小的参数。
  • minNeighbors – 指定每个候选矩形应该保留多少个邻居的参数。
  • flags – 与函数 cvHaarDetectObjects 中的旧级联具有相同含义的参数。它不用于新的级联。
  • minSize – 最小可能的对象大小。小于该值的对象将被忽略。
  • maxSize – 最大可能的对象大小。大于该值的对象将被忽略。
于 2013-03-22T03:10:02.663 回答