我目前正在尝试使用OpenCV 2.4.8进行人脸检测。我正在加载haarcascade分类器:haarcascade_frontalface_alt.xml。我正在使用带有以下参数的detectMultiScale函数:face_cascade.detectMultiScale(grayscaleFrame,faces,1.1,3,CV_HAAR_FIND_BIGGEST_OBJECT)。
问题在于它不会像它应该做的那样只返回最大的对象。我在调试模式下构建opencv,发现CV_HAAR_FIND_BIGGEST_OBJECT标志在新版本中是多余的。谁能告诉我其他方法检测框架中的最大物体?
答案 0 :(得分:3)
为什么不使用表面来衡量检测到的面部大小:
std::vector<cv::Rect> faces;
face_cascade.detectMultiScale(grayscaleFrame, faces, 1.1, 3,CV_HAAR_FIND_BIGGEST_OBJECT).
cv::Rect maxRect; // 0 sized rect
for(int i=0;i<faces.size();i++)
if (faces[i].area() > maxRect.area())
maxRect = faces[i];
它提供了良好的估计,例如当检测到多个人时,这种方法在大多数情况下会为我们提供最接近相机的脸部。