#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;
}