检测到的眼睛对周围没有矩形

3

我正在使用OpenCV 2.4.2和C++。我在检测眼睛区域方面遇到了一些小问题。矩形框不会出现在眼睛对的周围,而是出现在检测到的脸部矩形外面。我认为可能是参数设置不正确。

以下是代码片段:

for(int i=0;i<faces.size();i++){

        rectangle(frame,faces[i],Scalar(255,0,0),1,8,0);

        Mat face  = frame(faces[i]);
        cvtColor(face,face,CV_BGR2GRAY);
        imwrite("C:/Users/DELL/Documents/Visual Studio 2010/Projects/Haarcascade/Haarcascade/fot.jpg",face);
        vector<Rect> eyes;
        eye.detectMultiScale(face,eyes);

        for( size_t j = 0; j < eyes.size(); j++ ){

            rectangle(frame,eyes[i],Scalar(255,0,0),4,8,0);

        }

}

请问有人可以帮忙吗?谢谢。

1个回答

1
你正在寻找范围从0face->width和从0face->height的眼睛,以便获取相对于面部边界的眼睛坐标,然后在原始帧上绘制眼睛。你需要在帧中添加面部坐标,类似于这样:
Rect r(faces[i].x + eyes[i].x, faces[i].y + eyes[i].y, eyes[i].width,eyes[i].height );
rectangle(frame,r,Scalar(255,0,0),4,8,0);

矩形现在围绕着眼睛对了 :) 但是,矩形并没有完全停留在眼睛对的角落。有什么可以做的吗? - Steph
1
您的程序是只在两只眼睛周围画了一个矩形吗?如果是这样,您需要相应地调整矩形的宽度和高度。我建议您自己尝试一下,这并不复杂。如果您无法解决问题,请再留言,我会帮助您。 - Dabo
实际上,对于某些人脸图像,它可以检测到正确的大小,而对于某些人脸图像,它可能会太大。但无论如何,它都能正常工作,再次感谢。 - Steph
1
如果想要良好的眼睛检测,你应该进行一些预处理,实际上在现实世界中,你应该只在脸部相关区域寻找眼睛。为了更好地理解,我建议你阅读《MasteringOpenCv》第8章,这里是实现代码:https://github.com/MasteringOpenCV/code/tree/master/Chapter8_FaceRecognition 。 - Dabo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接