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