【20160924】GOCVHelper 图像处理部分(2)
//根据轮廓的面积大小进行选择 vector<VP>selectShapeArea(Matsrc,Mat&draw,vector<VP>contours,intminvalue,intmaxvalue){ vector<VP>result_contours; draw=Mat::zeros(src.rows,src.cols,CV_8UC3); for(inti=0;i<contours.size();i++){ doublecountour_area=contourArea(contours[i]); if(countour_area>minvalue&&countour_area<maxvalue) result_contours.push_back(contours[i]); } for(inti=0;i<result_contours.size();i++){ intiRandB=rng.uniform(0,255); intiRandG=rng.uniform(0,255); intiRandR=rng.uniform(0,255); Scalarcolor=Scalar(iRandB,iRandG,iRandR); drawContours(draw,result_contours,i,color,-1); charcbuf[100];sprintf_s(cbuf,"%d",i+1); //寻找最小覆盖圆,求出圆心。使用反色打印轮廓序号 floatradius; cv::Point2fcenter; cv::minEnclosingCircle(result_contours[i],center,radius); putText(draw,cbuf,center,FONT_HERSHEY_PLAIN,5,Scalar(255-iRandB,255-iRandG,255-iRandR),5); } returnresult_contours; } vector<VP>selectShapeArea(vector<VP>contours,intminvalue,intmaxvalue) { vector<VP>result_contours; for(inti=0;i<contours.size();i++){ doublecountour_area=contourArea(contours[i]); if(countour_area>minvalue&&countour_area<maxvalue) result_contours.push_back(contours[i]); } returnresult_contours; } 在Halcon中,运用非常广泛的SelectShape的Opencv实现,能够根据轮廓的大小,直接挑选出所需要的部分。我在这个基础上进行了强化,能够把每个轮廓的序号标注出来。并且依然提供draw打印。 来自为知笔记(Wiz) 目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com