1
/* This sample code was originally provided by Liu Liu
2
* Copyright� 2009, Liu Liu All rights reserved.
11
static CvScalar colors[] =
26
static uchar bcolors[][3] =
39
int main( int argc, char** argv )
45
strcpy(path,"puzzle.png");
46
img = cvLoadImage( path, CV_LOAD_IMAGE_GRAYSCALE );
49
printf("\nUsage: mser_sample <path_to_image>\n");
56
img = cvLoadImage( path, CV_LOAD_IMAGE_GRAYSCALE );
61
printf("Unable to load image %s\n",path);
64
IplImage* rsp = cvLoadImage( path, CV_LOAD_IMAGE_COLOR );
65
IplImage* ellipses = cvCloneImage(rsp);
66
cvCvtColor(img,ellipses,CV_GRAY2BGR);
68
CvMemStorage* storage= cvCreateMemStorage();
69
IplImage* hsv = cvCreateImage( cvGetSize( rsp ), IPL_DEPTH_8U, 3 );
70
cvCvtColor( rsp, hsv, CV_BGR2YCrCb );
71
CvMSERParams params = cvMSERParams();//cvMSERParams( 5, 60, cvRound(.2*img->width*img->height), .25, .2 );
73
double t = (double)cvGetTickCount();
74
cvExtractMSER( hsv, NULL, &contours, storage, params );
75
t = cvGetTickCount() - t;
76
printf( "MSER extracted %d contours in %g ms.\n", contours->total, t/((double)cvGetTickFrequency()*1000.) );
77
uchar* rsptr = (uchar*)rsp->imageData;
78
// draw mser with different color
79
for ( int i = contours->total-1; i >= 0; i-- )
81
CvSeq* r = *(CvSeq**)cvGetSeqElem( contours, i );
82
for ( int j = 0; j < r->total; j++ )
84
CvPoint* pt = CV_GET_SEQ_ELEM( CvPoint, r, j );
85
rsptr[pt->x*3+pt->y*rsp->widthStep] = bcolors[i%9][2];
86
rsptr[pt->x*3+1+pt->y*rsp->widthStep] = bcolors[i%9][1];
87
rsptr[pt->x*3+2+pt->y*rsp->widthStep] = bcolors[i%9][0];
90
// find ellipse ( it seems cvfitellipse2 have error or sth?
91
for ( int i = 0; i < contours->total; i++ )
93
CvContour* r = *(CvContour**)cvGetSeqElem( contours, i );
94
CvBox2D box = cvFitEllipse2( r );
95
box.angle=(float)CV_PI/2-box.angle;
98
cvEllipseBox( ellipses, box, colors[9], 2 );
100
cvEllipseBox( ellipses, box, colors[2], 2 );
104
cvSaveImage( "rsp.png", rsp );
106
cvNamedWindow( "original", 0 );
107
cvShowImage( "original", img );
109
cvNamedWindow( "response", 0 );
110
cvShowImage( "response", rsp );
112
cvNamedWindow( "ellipses", 0 );
113
cvShowImage( "ellipses", ellipses );
117
cvDestroyWindow( "original" );
118
cvDestroyWindow( "response" );
119
cvDestroyWindow( "ellipses" );
120
cvReleaseImage(&rsp);
121
cvReleaseImage(&img);
122
cvReleaseImage(&ellipses);