2013-02-15 113 views
4

我写的代码,我想如何检测的面部后,矩形扩大到达人检测后如何扩大矩形面临的OpenCV

#include <opencv2/imgproc/imgproc.hpp> //this code detetced faces /// 
    #include <opencv2/objdetect/objdetect.hpp>/////////// 
    #include <opencv2/highgui/highgui.hpp> 
    //////////////////// 
    using namespace cv; 
    using namespace std; 

    int main() 
    { 

     CascadeClassifier cascade; 

     if (!cascade.load("haarcascade_frontalface_alt2.xml")) //load harcascade xml 
      return -1; 

     Mat src = imread("11.jpg"); //read image 

     if (src.empty()) 
      return -1; 
    cv::resize(src,src,cv::Size(600,600)); resize image 
     Mat gray; 
     cvtColor(src, gray, CV_BGR2GRAY); 
     equalizeHist(gray, gray); 

     vector<Rect> faces; 
     cascade.detectMultiScale(gray, faces, 1.2, 3,0,Size(30,30)); 

     for (size_t i = 0; i < faces.size(); i++) 
     { 
    ///////////////////////////// 
      Rect r = faces[i]; 
    //////////////////////////////  

       Mat faceROI = gray(faces[i]); 
      int x = faces[i].x; 
      int y = faces[i].y; 
      int h =0.3*y+faces[i].height; 
      int w = faces[i].width; 
      printf("Orig dimensions after h * w crop 1: %dx%d\n",h,w); 
      printf("Orig dimensions after x* y crop 2: %dx%d\n",x,y); 

      rectangle(src,Point (x,y),Point(x + w,y +h),Scalar(255,0,255),1,4,0); 
      imshow("mmmmmmmmmmm.jpg",src); //show image in windows 
     } 
    /////////////////////////////// 

     waitKey(0); 

     return 0; 
    } 

回答

7

的头部和颈部需要调整高度并适当地开始y坐标。

简而言之,我觉得箱子的高度在两侧(顶部和底部)应该增加0.3倍。所以我从y中减去0.3*h,并加上0.3*2*h(即0.6 * h)到h

这只是我粗略的计算。为了进行精细调整,您需要针对不同的面部进行分析,并提出最适合您目的的测量。

这里是改变的代码:

int x = faces[i].x; 
int h_temp = faces[i].height; // storing original height 
int y = faces[i].y - h_temp*0.3; // y is reduced by 0.3*h 
int w = faces[i].width; 
int h = h_temp*1.6;    // height is increases by 60% 

,下面将我的例子的结果。绿色显示我得到的原始。蓝色是修改:

face detection example

记住,你要多少选择,取决于你。对上述值进行调整以获得您所需的结果。

+0

感谢您很多阿比德rahman – 2013-02-16 19:16:58

+0

最受欢迎。对你起作用吗?如果是这样,您可以通过点击我答案附近的勾号来接受此答案,并关闭此会话。如果没有解决,你可以在这里提到你的问题作为评论。 (我从你的个人资料中看到,你是SOF的新手,所以我提醒了这一点)。 – 2013-02-17 02:04:55

+0

工作再次谢谢 – 2013-02-17 16:57:42

12

要展开的OpenCV面对矩形,也可以使用以下运算符(1)至cv::Rect

//expanding or shrinking a rectangle by a certain amount 
cv::Rect += cv::Size 
//shifting a rectangle by a certain offset 
cv::Rect -= cv::Point 

实施例为10%扩大面部矩形将是

cv::Size deltaSize(faces[i].width * 0.1f, faces[i].height * 0.1f); // 0.1f = 10/100 
cv::Point offset(deltaSize.width/2, deltaSize.height/2); 
faces[i] += deltaSize; 
faces[i] -= offset; 
+0

谢谢,工作正常。 – YuryChu 2017-07-14 11:07:54