source: foam/trunk/vision/src/main.cpp @ 83

Revision 83, 5.1 KB checked in by dave, 11 years ago (diff)

small path fix

Line 
1#define CV_NO_BACKWARD_COMPATIBILITY
2
3#include "cv.h"
4#include "highgui.h"
5
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <assert.h>
10#include <math.h>
11#include <float.h>
12#include <limits.h>
13#include <time.h>
14#include <ctype.h>
15
16#ifdef _EiC
17#define WIN32
18#endif
19
20#include "Image.h"
21
22static CvMemStorage* storage = 0;
23
24void detect_and_draw( IplImage* image );
25
26double scale = 1;
27
28int main( int argc, char** argv )
29{
30    CvCapture* capture = 0;
31    IplImage *frame, *frame_copy = 0;
32    IplImage *image = 0;
33    const char* scale_opt = "--scale=";
34    int scale_opt_len = (int)strlen(scale_opt);
35    int i;
36    const char* input_name = 0;
37
38    for( i = 1; i < argc; i++ )
39    {
40        if( strncmp( argv[i], scale_opt, scale_opt_len ) == 0 )
41        {
42            if( !sscanf( argv[i] + scale_opt_len, "%lf", &scale ) || scale < 1 )
43                scale = 1;
44        }
45        else if( argv[i][0] == '-' )
46        {
47            fprintf( stderr, "WARNING: Unknown option %s\n", argv[i] );
48        }
49        else
50            input_name = argv[i];
51    }
52
53    storage = cvCreateMemStorage(0);
54
55    if( !input_name || (isdigit(input_name[0]) && input_name[1] == '\0') )
56        capture = cvCaptureFromCAM( !input_name ? 0 : input_name[0] - '0' );
57    else if( input_name )
58    {
59        image = cvLoadImage( input_name, 1 );
60        if( !image )
61            capture = cvCaptureFromAVI( input_name );
62    }
63    else
64        image = cvLoadImage( "lena.jpg", 1 );
65
66    cvNamedWindow( "result", 1 );
67
68    if( capture )
69    {
70        for(;;)
71        {
72            frame = cvQueryFrame( capture );
73            if( !frame )
74                break;
75            if( !frame_copy )
76                frame_copy = cvCreateImage( cvSize(frame->width,frame->height),
77                                            IPL_DEPTH_8U, frame->nChannels );
78            if( frame->origin == IPL_ORIGIN_TL )
79                cvCopy( frame, frame_copy, 0 );
80            else
81                cvFlip( frame, frame_copy, 0 );
82
83            detect_and_draw( frame_copy );
84
85            if( cvWaitKey( 10 ) >= 0 )
86                goto _cleanup_;
87        }
88
89        cvWaitKey(0);
90_cleanup_:
91        cvReleaseImage( &frame_copy );
92        cvReleaseCapture( &capture );
93    }
94    else
95    {
96        if( image )
97        {
98            detect_and_draw( image );
99            cvWaitKey(0);
100            cvReleaseImage( &image );
101        }
102        else if( input_name )
103        {
104            /* assume it is a text file containing the
105               list of the image filenames to be processed - one per line */
106            FILE* f = fopen( input_name, "rt" );
107            if( f )
108            {
109                char buf[1000+1];
110                while( fgets( buf, 1000, f ) )
111                {
112                    int len = (int)strlen(buf), c;
113                    while( len > 0 && isspace(buf[len-1]) )
114                        len--;
115                    buf[len] = '\0';
116                    printf( "file %s\n", buf );
117                    image = cvLoadImage( buf, 1 );
118                    if( image )
119                    {
120                        detect_and_draw( image );
121                        c = cvWaitKey(0);
122                        if( c == 27 || c == 'q' || c == 'Q' )
123                            break;
124                        cvReleaseImage( &image );
125                    }
126                }
127                fclose(f);
128            }
129        }
130    }
131
132    cvDestroyWindow("result");
133
134    if (storage)
135    {
136        cvReleaseMemStorage(&storage);
137    }
138
139    return 0;
140}
141static CvScalar colors[] =
142    {
143        {{255,255,255}},
144        {{0,128,255}},
145        {{0,255,255}},
146        {{0,255,0}},
147        {{255,128,0}},
148        {{255,255,0}},
149        {{255,0,0}},
150        {{255,0,255}}
151    };
152/*
153void lpbhist(int x, int y, IplImage* img, IplImage* mainimg)
154{
155        IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
156    cvCvtColor( img, gray, CV_BGR2GRAY );
157    IplImage *lbp = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
158        LBPImage(gray, lbp);
159        unsigned int *h=HistMono8Bit(lbp);
160        BlitImage(lbp,mainimg,cvPoint(x,y));
161        DrawHistogram8(x+img->width, y, -0.1, colors[0], h, lbp);
162        delete[] h;
163        cvReleaseImage( &lbp );
164        cvReleaseImage( &gray );
165}
166*/
167void detect_and_draw( IplImage* img )
168{
169    IplImage *gray, *small_img;
170    int i, j;
171
172    gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
173    small_img = cvCreateImage( cvSize( cvRound (img->width/scale),
174                         cvRound (img->height/scale)), 8, 1 );
175
176    cvCvtColor( img, gray, CV_BGR2GRAY );
177    cvResize( gray, small_img, CV_INTER_LINEAR );
178    cvEqualizeHist( small_img, small_img );
179    cvClearMemStorage( storage );
180       
181        // test the debayering
182        Image im("data/bayer.pgm");
183        im.Crop(300,300,320,240);
184        im.RGB2GRAY();
185        //im.PrintInfo();
186        im.BayerGB2RGB();
187    cvShowImage( "result", im.m_Image );
188       
189/*
190        IplImage *li = cvLoadImage("test3-0.png");
191        lpbhist(0, 0, li, gray);
192        cvReleaseImage( &li );
193 
194        li = cvLoadImage("test3-1.png");
195        lpbhist(100, 0, li, gray);
196        cvReleaseImage( &li );
197 
198        li = cvLoadImage("test3-3.png");
199        lpbhist(200, 0, li, gray);
200        cvReleaseImage( &li );
201*/
202    cvReleaseImage( &gray );
203    cvReleaseImage( &small_img );
204}
205
Note: See TracBrowser for help on using the repository browser.