我的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;
}
答案 0 :(得分:1)
只需注意,根据the OpenCV documentation,标志(例如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()) 参数:
- 级联 - Haar分类器级联(仅限OpenCV 1.x API)。它可以使用Load()从XML或YAML文件加载。当不再需要级联时,使用cvReleaseHaarClassifierCascade(& cascade)释放它。
- image - 包含检测到对象的图像的CV_8U类型的矩阵。
- 对象 - 矩形矢量,其中每个矩形包含检测到的对象。
- scaleFactor - 指定每个图像比例缩小图像尺寸的参数。
- minNeighbors - 参数指定每个候选矩形应保留多少个邻居。
- flags - 与函数cvHaarDetectObjects中的旧级联具有相同含义的参数。 它不用于新的级联。
- minSize - 最小可能的对象大小。小于的对象将被忽略。
- maxSize - 最大可能的对象大小。大于该值的对象将被忽略。