Changeset 783


Ignore:
Timestamp:
12/30/2010 12:26:14 PM (10 years ago)
Author:
dave
Message:

added harvest

Location:
libs/magicsquares/examples/harvest
Files:
14 added
3 edited
1 copied

Legend:

Unmodified
Added
Removed
  • libs/magicsquares/examples/harvest/Makefile

    r665 r783  
    1 TARGET  := template 
     1TARGET  := harvest 
    22 
    33SRCS    := src/main.cpp\ 
    4         src/App.cpp 
     4        src/App.cpp\ 
     5        src/Blob.cpp\ 
     6        src/BlobResult.cpp\ 
     7        src/BlobContour.cpp\ 
     8        src/BlobOperators.cpp\ 
     9        src/ComponentLabeling.cpp 
    510 
    611# for the minute, go out and up to link to the vision lib 
  • libs/magicsquares/examples/harvest/src/App.cpp

    r665 r783  
    1919#include "FileTools.h" 
    2020#include "PCA.h" 
     21#include "Blob.h" 
     22#include "BlobResult.h" 
    2123 
    2224//#define SAVE_FRAMES 
     
    3436m_Frame(NULL), 
    3537m_FrameCopy(NULL), 
    36 m_FrameNum(0) 
     38m_FrameNum(0), 
     39m_SingleImage(false) 
    3740{ 
    3841        if (filename=="") 
     
    4245        else 
    4346        { 
    44                 m_Capture = cvCaptureFromAVI(filename.c_str()); 
     47        cerr<<"loading from "<<filename<<endl; 
     48                //m_Capture = cvCaptureFromFile(filename.c_str()); 
     49        m_Frame = cvLoadImage(filename.c_str()); 
     50        m_SingleImage=true; 
    4551        } 
    4652         
    47         assert(m_Capture); 
    4853        cvInitFont( &m_Font, CV_FONT_HERSHEY_PLAIN, 0.5, 0.5, 0, 1, CV_AA ); 
    4954        cvInitFont( &m_LargeFont, CV_FONT_HERSHEY_PLAIN, 5, 5, 0, 10, CV_AA );     
    50         cvNamedWindow( "motion detection", 1 ); 
     55        cvNamedWindow( "harvest", 1 ); 
    5156} 
    5257 
     
    6974void App::Run() 
    7075{ 
    71         m_Frame = cvQueryFrame( m_Capture ); 
    72     if( !m_Frame )  
     76    if( !m_SingleImage )  
    7377        { 
    74                 cerr<<"no frame captured"<<endl; 
    75                 return; 
     78        m_Frame = cvQueryFrame( m_Capture ); 
    7679        } 
    7780         
     
    9598#endif 
    9699 
    97         cvShowImage("motion detection", camera.m_Image); 
     100        cvShowImage("harvest", camera.m_Image); 
    98101} 
    99102 
     
    105108        int key=cvWaitKey(10); 
    106109         
    107         int learn=-1; 
    108          
     110        static int t=200; 
     111    bool viewthresh=false; 
     112 
    109113        switch (key) 
    110114        { 
    111                 case 's': learn=0; break; 
    112                 case 'f': learn=1; break; 
     115    case 'q': t--; viewthresh=true; break; 
     116    case 'w': t++; viewthresh=true; break; 
    113117        }                        
     118 
     119    Image thresh=camera.RGB2GRAY(); 
     120    cvThreshold(thresh.m_Image,thresh.m_Image,t,255,CV_THRESH_BINARY); 
     121    //cvFloodFill(thresh.m_Image,cvPoint(10,10), cvScalar(255),cvScalar(0),cvScalar(255)); 
     122     
     123    CBlobResult blobs; 
     124    blobs = CBlobResult( thresh.m_Image, NULL, 255 ); 
     125    // exclude the ones smaller than param2 value 
     126    blobs.Filter( blobs, B_EXCLUDE, CBlobGetArea(), B_LESS, 10); 
     127 
     128    if (viewthresh) camera=thresh; 
     129 
     130    CBlob *currentBlob; 
     131    Image *out=NULL; 
     132 
     133    if (key=='s') 
     134    { 
     135        // add the alpha channel 
     136        out = new Image(camera.m_Image->width, 
     137                        camera.m_Image->height, 8, 4);     
     138         
     139        for(int y=0; y<camera.m_Image->height; y++) 
     140        { 
     141 
     142            for(int x=0; x<camera.m_Image->width; x++) 
     143            { 
     144                CvScalar col = cvGet2D(camera.m_Image,y,x); 
     145                CvScalar alpha = cvGet2D(thresh.m_Image,y,x); 
     146                col.val[3]=256-alpha.val[0]; 
     147                cvSet2D(out->m_Image,y,x,col); 
     148            } 
     149        }    
     150    } 
     151     
     152    for (int i = 0; i < blobs.GetNumBlobs(); i++ ) 
     153    { 
     154        currentBlob = blobs.GetBlob(i); 
     155        //currentBlob->FillBlob( camera.m_Image, CV_RGB(255,0,0)); 
     156 
     157        CvRect rect = currentBlob->GetBoundingBox(); 
     158 
     159        if (key=='s') 
     160        { 
     161            Image island = out->SubImage(rect.x,rect.y, 
     162                                         rect.width,rect.height); 
     163             
     164            char buf[256]; 
     165            sprintf(buf,"islands/island-%d-%d-%d.png",i, 
     166                    rect.x+rect.width/2, 
     167                    rect.y+rect.height/2); 
     168            cerr<<"saving "<<buf<<endl; 
     169            island.Save(buf); 
     170        } 
     171        else 
     172        { 
     173            char buf[256]; 
     174            sprintf(buf,"%d",currentBlob->GetID()); 
     175            cvPutText(camera.m_Image, buf, cvPoint(rect.x,rect.y), &m_Font, colors[0]); 
     176             
     177            cvRectangle(camera.m_Image,  
     178                        cvPoint(rect.x,rect.y),  
     179                        cvPoint(rect.x+rect.width,rect.y+rect.height),  
     180                        colors[1]); 
     181        } 
     182    } 
     183 
     184    if (out!=NULL) delete out; 
    114185} 
    115186 
  • libs/magicsquares/examples/harvest/src/App.h

    r665 r783  
    4444        IplImage *m_FrameCopy; 
    4545        int m_FrameNum; 
     46    bool m_SingleImage; 
    4647}; 
Note: See TracChangeset for help on using the changeset viewer.