我正在使用opencv和C ++,虽然我是初学者。我试图使用Haarcascade从一组图像中检测和计算面部。 我只想获得每张图片上的面孔数量。 如何编辑此代码以获取图像上的面数????
Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), webView.getContentHeight(), Bitmap.Config.ARGB_4444);
webView.draw(new Canvas(bitmap));
}
答案 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}}。
要遵循的粗略步骤是:
CascadeClassifier
,您需要传递std::vector<cv::Rect>
作为参数。检测后,此向量将包含所有检测到的对象的位置(在您的情况下,面部)。老实说,我链接的例子是你可以自己找到的东西而不需要太多努力。