root/trunk/opencv/samples/c/mser_sample.cpp @ 2633

Revision 2633, 3.0 KB (checked in by bradski, 4 years ago)

put <stdio.h> include into mser_sample.cpp

Line 
1/* This sample code was originally provided by Liu Liu
2 * Copyright© 2009, Liu Liu All rights reserved.
3 */
4
5#include <iostream>
6#include <stdio.h>
7#include "cv.h"
8#include "highgui.h"
9
10    static CvScalar colors[] = 
11    {
12        {{0,0,255}},
13        {{0,128,255}},
14        {{0,255,255}},
15        {{0,255,0}},
16        {{255,128,0}},
17        {{255,255,0}},
18        {{255,0,0}},
19        {{255,0,255}},
20        {{255,255,255}},
21        {{196,255,255}},
22        {{255,255,196}}
23    };
24   
25    static uchar bcolors[][3] = 
26    {
27        {0,0,255},
28        {0,128,255},
29        {0,255,255},
30        {0,255,0},
31        {255,128,0},
32        {255,255,0},
33        {255,0,0},
34        {255,0,255},
35        {255,255,255}
36    };
37
38int main( int argc, char** argv )
39{
40        char path[1024];
41        IplImage* img;
42        if (argc!=2)
43        {
44                strcpy(path,"puzzle.png");
45                img = cvLoadImage( path, CV_LOAD_IMAGE_GRAYSCALE );
46                if (!img)
47                {
48                        printf("\nUsage: mser_sample <path_to_image>\n");
49                        return 0;
50                }
51        }
52        else
53        {
54                strcpy(path,argv[1]);
55                img = cvLoadImage( path, CV_LOAD_IMAGE_GRAYSCALE );
56        }
57       
58        if (!img)
59        {
60                printf("Unable to load image %s\n",path);
61                return 0;
62        }
63        IplImage* rsp = cvLoadImage( path, CV_LOAD_IMAGE_COLOR );
64        IplImage* ellipses = cvCloneImage(rsp);
65        cvCvtColor(img,ellipses,CV_GRAY2BGR);
66        CvSeq* contours;
67        CvMemStorage* storage= cvCreateMemStorage();
68        IplImage* hsv = cvCreateImage( cvGetSize( rsp ), IPL_DEPTH_8U, 3 );
69        cvCvtColor( rsp, hsv, CV_BGR2YCrCb );
70        CvMSERParams params = cvMSERParams();//cvMSERParams( 5, 60, cvRound(.2*img->width*img->height), .25, .2 );
71
72        double t = (double)cvGetTickCount();
73        cvExtractMSER( hsv, NULL, &contours, storage, params );
74        t = cvGetTickCount() - t;
75        printf( "MSER extracted %d contours in %g ms.\n", contours->total, t/((double)cvGetTickFrequency()*1000.) );
76        uchar* rsptr = (uchar*)rsp->imageData;
77        // draw mser with different color
78        for ( int i = contours->total-1; i >= 0; i-- )
79        {
80                CvSeq* r = *(CvSeq**)cvGetSeqElem( contours, i );
81                for ( int j = 0; j < r->total; j++ )
82                {
83                        CvPoint* pt = CV_GET_SEQ_ELEM( CvPoint, r, j );
84                        rsptr[pt->x*3+pt->y*rsp->widthStep] = bcolors[i%9][2];
85                        rsptr[pt->x*3+1+pt->y*rsp->widthStep] = bcolors[i%9][1];
86                        rsptr[pt->x*3+2+pt->y*rsp->widthStep] = bcolors[i%9][0];
87                }
88        }
89        // find ellipse ( it seems cvfitellipse2 have error or sth?
90        for ( int i = 0; i < contours->total; i++ )
91        {
92                CvContour* r = *(CvContour**)cvGetSeqElem( contours, i );
93                CvBox2D box = cvFitEllipse2( r );
94                box.angle=(float)CV_PI/2-box.angle;
95               
96                if ( r->color > 0 )
97                        cvEllipseBox( ellipses, box, colors[9], 2 );
98                else
99                        cvEllipseBox( ellipses, box, colors[2], 2 );
100                       
101        }
102
103        cvSaveImage( "rsp.png", rsp );
104
105        cvNamedWindow( "original", 0 );
106        cvShowImage( "original", img );
107       
108        cvNamedWindow( "response", 0 );
109        cvShowImage( "response", rsp );
110
111        cvNamedWindow( "ellipses", 0 );
112        cvShowImage( "ellipses", ellipses );
113
114        cvWaitKey(0);
115
116        cvDestroyWindow( "original" );
117        cvDestroyWindow( "response" );
118        cvDestroyWindow( "ellipses" );
119        cvReleaseImage(&rsp);
120        cvReleaseImage(&img);
121        cvReleaseImage(&ellipses);
122       
123}
Note: See TracBrowser for help on using the browser.