获取轮廓中心点,并且判断是否在一个矩形区域内

最近在做图像处理项目,需要对获取到的多个轮廓进行筛选,之前的代码是取最大的轮廓,而我真正想要取到的是第二大的那个轮廓,最大的轮廓需要被筛选掉,而最大的轮廓位于图像左边,所以增加了一个筛选的规则,取到每个轮廓的中心点,然后判断中心点是否在图像左边的那个矩形区域内,以此筛选掉最大的轮廓。

bool CAlgorithmWind::GetContourCenter(vector<cv::Point> contour,cv::Point &p)
{
   //cv::Point p = 0;
   double sum_px=0,sum_py=0;
   for(unsigned int i = 0 ;i < contour.size(); i++)
   { 
     p=contour.at(i);
     sum_px+=p.x;
     sum_py+=p.y;
   } 
   p.x=sum_px/contour.size();
   p.y=sum_py/contour.size();
   //cout<<p.x <<p.y<<endl;
   CPoint point=CPoint(p.x,p.y);
   CPoint point1=CPoint(0,0);
   CPoint point2=CPoint(350,640);
   CRect kp (point1,point2);//构造一个长度350,宽度640的矩形区域

    BOOL flag = kp.PtInRect(point);//判断中心点是否在这个矩形区域内
    if (flag)
    {
    return false;
    }

   else
    {
   return true; 
    }
}

猜你喜欢

转载自blog.csdn.net/kai69/article/details/76570098