gpt4 book ai didi

c++ - 为什么 detectMultiScale 只检测靠近画面中心的人脸?

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:14 24 4
gpt4 key购买 nike

我正在尝试一个非常简单的程序来检测网络摄像头中的人脸。我注意到当我的脸位于画面中央时,可以很好地检测到人脸。每当我向两侧移动一点时,面部检测器要么完全错过我的脸,要么没有检测到。这种偏见是因为我使用函数的方式(附加代码)还是 HAAR 分类器的固有偏见?请注意,在任何一种情况下(我的脸在框架的大致中心或我的脸在边界附近的某个地方),我的脸都是完全可见的,即侧面轮廓/或面部切割。

//A live face detector Program. Takes feed from the camera and detects face in the given frame

#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>
#include"opencv2/video/video.hpp"
using namespace cv;
using namespace std;



int main(){
cv::Mat frame;
cv::VideoCapture cap(0);
cv::namedWindow("Frame");
do{
cap >> frame;

Rect r1,r2;
vector<Rect> faces1,faces2;
CascadeClassifier cascade1;
CascadeClassifier cascade2;
//cascade1.load("C:/opencv2.4.9/sources/data/lbpcascades/lbpcascade_frontalface.xml");
cascade1.load("C:/opencv2.4.9/sources/data/haarcascades/haarcascade_frontalface_alt2.xml");
cascade2.load("C:/opencv2.4.9/sources/data/lbpcascades/lbpcascade_profileface.xml");
cascade1.detectMultiScale(frame, faces1,1.05, 6, CV_HAAR_FIND_BIGGEST_OBJECT, Size(0, 0));
cascade2.detectMultiScale(frame, faces2,1.05, 6, CV_HAAR_FIND_BIGGEST_OBJECT, Size(0, 0));
if (faces1.size()!=0){
cout << "face1 found";
r1 = faces1[0];
}

if (faces2.size()!=0){
cout << "face2 found";
r2 = faces2[0];
}

rectangle(frame, Point(r1.y,r1.x), Point(r1.y+r1.height,r1.x+r1.width), Scalar(0,255,0),2, 8);
rectangle(frame, Point(r2.y,r2.x), Point(r2.y+r2.height,r2.x+r2.width), Scalar(255,0,0),2, 8);
imshow("Frame",frame);
}while(waitKey(30) < 0);

cap.release();
return 0;
}

最佳答案

你的 haar 分类器代码运行良好。在你的代码中改变这个

 rectangle(frame, Point(r1.y,r1.x), Point(r1.y+r1.height,r1.x+r1.width), Scalar(0,255,0),2, 8);
rectangle(frame, Point(r2.y,r2.x), Point(r2.y+r2.height,r2.x+r2.width), Scalar(255,0,0),2, 8);

rectangle(frame, Point(r1.x, r1.y), Point(r1.x + r1.width, r1.y + r1.height), Scalar(0, 255, 0), 2, 8);
rectangle(frame, Point(r2.x, r2.y), Point(r2.x + r2.width, r2.y + r2.height), Scalar(255, 0, 0), 2, 8);

它会起作用的。您已经更改了 x,y 值。

关于c++ - 为什么 detectMultiScale 只检测靠近画面中心的人脸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24691701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com