使用open cv和c ++检测并计算图像上的面部

时间:2015-05-05 11:58:33

标签: c++ image opencv face-detection

我正在使用opencv和C ++,虽然我是初学者。我试图使用Haarcascade从一组图像中检测和计算面部。 我只想获得每张图片上的面孔数量。 如何编辑此代码以获取图像上的面数????

Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), webView.getContentHeight(), Bitmap.Config.ARGB_4444);
webView.draw(new Canvas(bitmap));

}

2 个答案:

答案 0 :(得分:1)

修改了您发布的代码示例,只返回图像中检测到的面部数量...

// Function to count the detected faces in your image
void countFacesInImage(Mat frame)
{
    std::vector<Rect> faces;
    Mat frame_gray;

    cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
    equalizeHist(frame_gray, frame_gray);

    // Detect faces
    face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 |     CASCADE_SCALE_IMAGE, Size(30, 30));

    return faces.size();
}

如果您希望了解哪些面部被检测到,哪些不是,您可以在返回之前添加此代码:

cv::Mat tmpImage = frame.clone();
for(unsigned int i=0; i<faces.size(); ++i)
{
    cv::rectangle(tmpImage, faces[i], cv::Scalar(0,255,0), 2);
}
cv::imshow("faces", tmpImage);
cv::waitKey(0);

在每个图像之后,您必须按下具有活动窗口“面部”的键。您可以更改为cv::waitKey(n)等待n毫秒,而不需要按键。

答案 1 :(得分:0)

我必须做类似的事情并在OpenCV网站上使用CascadeClassifier的{​​{3}}。

要遵循的粗略步骤是:

  1. 加载您要处理的所有图像。
  2. 对于每张图片,应用示例中的CascadeClassifier,您需要传递std::vector<cv::Rect>作为参数。检测后,此向量将包含所有检测到的对象的位置(在您的情况下,面部)。
  3. 对于每个图像,返回向量的大小以了解检测到的面数。
  4. 老实说,我链接的例子是你可以自己找到的东西而不需要太多努力。