#include #include #include #include #include "cvcam.h" #include "cv.h" #include "highgui.h" /************************************************************************ * ************************************************************************/ int main( int argc, char** argv ) { IplImage* frame, *frame_copy = 0; uchar *data; int height,width,step,channels; int minx,miny,maxx,maxy; int i,j,k; if( argc == 2 && (frame=cvLoadImage(argv[1], 1))!= 0) { if( !frame ) exit(0); } cvNamedWindow( "result", 1 ); if( !frame_copy ) frame_copy = cvCreateImage( cvSize(frame->width,frame->height), IPL_DEPTH_8U, frame->nChannels ); if( frame->origin == IPL_ORIGIN_TL ) cvCopy( frame, frame_copy, 0 ); else cvFlip( frame, frame_copy, 0 ); // get the image data height = frame->height; width = frame->width; step = frame->widthStep; channels = frame->nChannels; data = (uchar *)frame->imageData; printf("Processing a %dx%d image with %d channels\n",height,width,channels); for(i=0;i= 115 && data[i*step+j*channels+0] <= 135) && (data[i*step+j*channels+1] >= 17 && data[i*step+j*channels+1] <= 30) && (data[i*step+j*channels+2] >= 0 && data[i*step+j*channels+2] <= 25)) { data[i*step+j*channels+0]=255; data[i*step+j*channels+1]=255; data[i*step+j*channels+2]=255; } else { data[i*step+j*channels+0]=0; data[i*step+j*channels+1]=0; data[i*step+j*channels+2]=0; } } // Exibe região com a cor segmentada cvShowImage("result", frame ); cvWaitKey(0); // Procura as bordas que definem a região segmentada minx=miny= 9999; maxx=maxy=-9999; for(i=0;i maxy) maxy=i; if (j < minx) minx=j; if (j > maxx) maxx=j; } } printf ("Bounding Box: Xi,Yi(%d,%d) to Xf,Yf(%d,%d)\n",minx,miny,maxx,maxy); // Exibe região com a cor segmentada cvRectangle(frame, cvPoint(minx,miny), cvPoint(maxx,maxy), CV_RGB(255,0,0), 1, 8, 0); cvShowImage("result", frame ); cvWaitKey(0); cvReleaseImage( &frame_copy ); cvDestroyWindow("result"); return 0; }