我的Android应用程序使用javaCV并调用detectMultiScale()函数与LBP级联来检测人脸。它在我的模拟器上完全正常工作。然而,当我试图在我的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;
}
只是一个注意,根据OpenCV文档,标志(如CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH)不能与新的级联(如LBP)一起使用。
无效cascadecclassifier::detectMultiScale(const Mat&形象,vector&对象,double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())参数:
- 级联 - Haar分类器级联(OpenCV)仅限x API)。它可以使用Load()从XML或YAML文件加载。当不再需要级联时,使用cvReleaseHaarClassifierCascade(&cascade)释放它。
- image - CV_8U类型的矩阵,包含检测到对象的图像。
- objects -矩形向量,其中每个矩形包含检测到的对象。
- scaleFactor -指定在每个图像缩放时图像大小减少的参数。
- minNeighbors -指定每个候选矩形应该保留多少邻居的参数。
- flags -参数与函数cvHaarDetectObjects中旧级联的含义相同。不用于新建级联
- minSize -最小对象大小。
- maxSize -最大可能的对象大小。大于该值的对象将被忽略。