最近在做圖像處理項目,需要對獲取到的多個輪廓進行篩選,之前的代碼是取最大的輪廓,而我真正想要取到的是第二大的那個輪廓,最大的輪廓需要被篩選掉,而最大的輪廓位於圖像左邊,所以增加了一個篩選的規則,取到每個輪廓的中心點,然後判斷中心點是否在圖像左邊的那個矩形區域內,以此篩選掉最大的輪廓。
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; } }