利用opencv,在closeimage的各个连通域中寻找重心,并圈出矩形框
cvFindContours(closeimage,storage,&contour,sizeof(CvContour),CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE);
CvMoments m;
CvMat mat;
double M00;
CvSeq*contour2=contour;
IplImage *pTmp=cvCreateImage(cvGetSize(closeimage),IPL_DEPTH_8U,1);
IplImage *pTmp1=cvCreateImage(cvGetSize(closeimage),IPL_DEPTH_8U,1);
for(;contour2!=0;contour2=contour2->h_next)
{
CvRect rect=cvBoundingRect(contour2); //得到边界的矩形框
cvDrawContours(pTmp,contour2,CV_RGB(255,255,255),CV_RGB(255,255,255),-1, 1, 8);
cvRectangle(pTmp,cvPoint(rect.x,rect.y),cvPoint(rect.x+rect.width,rect.y+rect.height),CV_RGB(255,255,255),1,CV_AA,0);
int n=contour->total;
CvRect r=((CvContour*)contour2)->rect;
CvPoint2D32f center;
cvMoments(cvGetSubRect(pTmp,&mat,r),&m,0);
M00=cvGetSpatialMoment(&m,0,0);
center.x=cvGetSpatialMoment(&m,1,0)/M00; //重心为(centerx.+r.x,center.y+r.y)
center.y=cvGetSpatialMoment(&m,0,1)/M00;
double nHalfW,nHalfH;
nHalfW=center.x<(r.width-center.x)?center.x:(r.width-center.x);
nHalfH=center.y<(r.height-center.y)?center.y:(r.height-center.y);
cvDrawContours(pTmp1,contour2,CV_RGB(255,255,255),CV_RGB(255,255,255),-1, 1, 8);
cvRectangle(pTmp1,cvPoint(center.x+r.x-nHalfW,center.y+r.y-nHalfH),cvPoint(center.x+r.x+nHalfW,center.y+r.y+nHalfH),CV_RGB(255,255,255),1,CV_AA,0);
cvSaveImage("contoursss.bmp",pTmp);
cvSaveImage("contoursss1.bmp",pTmp1);
}