#include <cv.h>
#include <highgui.h>
int main()
{
char* filename = "cs.jpg";
IplImage* src_image = cvLoadImage(filename,1);
if(!src_image)
return -1;
cvNamedWindow("src");
CvSize size = cvGetSize(src_image);
IplImage* gray_image = cvCreateImage(size,8,1);
cvCvtColor(src_image,gray_image,CV_BGR2GRAY);
IplImage* dist_image = cvCreateImage(size,32,1);
IplImage* bi_src = cvCreateImage(size,8,1);
IplImage* dist8u_image = cvCreateImage(size,8,1);
IplImage* bi_dist = cvCreateImage(size,8,1);
cvThreshold(gray_image,bi_src,100,255,CV_THRESH_BINARY);
cvDistTransform(bi_src,dist_image,CV_DIST_L2,3,0,0);
double max;
cvMinMaxLoc(dist_image,0,&max,0,0);
cvCvtScale(dist_image,dist8u_image,255./max);
cvShowImage("dist8u_image",dist8u_image);
float s=0.0, x=0.0, y=0.0;
uchar* data = (uchar*)bi_dist->imageData;
int step = bi_dist->widthStep;
for(int h=0;h<bi_dist->height;h++)
for(int w=0;w<bi_dist->width;w++)
if(255 == data[step*h+w])
{
x += w;
y += h;
s++;
}
if(s>0)
{
x = x/s;
y = y/s;
}
CvPoint pos = cvPoint((int)x,(int)y);
cvCircle(src_image,pos,3,CV_RGB(255,0,0),1,CV_AA);
cvShowImage("src",src_image);
cvWaitKey(-1);
cvDestroyWindow("src");
cvReleaseImage(&src_image);
cvReleaseImage(&gray_image);
cvReleaseImage(&bi_src);
cvReleaseImage(&dist8u_image);
cvReleaseImage(&bi_dist);
return 0;
}