Changeset 1020


Ignore:
Timestamp:
03/16/2011 03:57:10 PM (9 years ago)
Author:
dave
Message:

changes for (and during) pixelache public event

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libs/magicsquares/applications/harvest/src/App.cpp

    r1003 r1020  
    1616 
    1717#include <assert.h> 
     18#include <list> 
    1819#include "App.h" 
    1920#include "FileTools.h" 
     
    5556        } 
    5657         
    57         cvInitFont( &m_Font, CV_FONT_HERSHEY_PLAIN, 0.5, 0.5, 0, 1, CV_AA ); 
     58        cvInitFont( &m_Font, CV_FONT_HERSHEY_PLAIN, 1, 1, 0, 1, CV_AA ); 
    5859        cvInitFont( &m_LargeFont, CV_FONT_HERSHEY_PLAIN, 5, 5, 0, 10, CV_AA );     
    5960        cvNamedWindow( "harvest", 1 ); 
     
    105106} 
    106107 
    107 char *spirits[]={"CanopySpirit","VerticalSpirit","CoverSpirit"}; 
     108char *spirits[]={"TreeSpirit","ShrubSpirit","CoverSpirit"}; 
     109 
     110bool PointInside(int x, int y, CvRect b) 
     111{ 
     112    return (x>b.x && x<b.x+b.width && 
     113            y>b.y && y<b.y+b.height); 
     114} 
     115 
     116bool Inside(CvRect a, CvRect b) 
     117{ 
     118    return PointInside(a.x,a.y,b) || 
     119        PointInside(a.x+a.width,a.y,b) || 
     120        PointInside(a.x,a.y+a.height,b) || 
     121        PointInside(a.x+a.width, 
     122                    a.y+a.height,b); 
     123} 
    108124 
    109125void App::Update(Image &camera) 
    110126{        
     127    camera=camera.Scale(camera.m_Image->width/2, 
     128                        camera.m_Image->height/2); 
     129 
     130    cvFlip(camera.m_Image, NULL, 0); 
     131 
    111132        /////////////////////////////////// 
    112133        // dispatch from input 
     
    145166 
    146167    if (crop_x<0) crop_x=0; 
    147     if (crop_x>=camera.m_Image->width) crop_x=camera.m_Image->width;  
     168    if (crop_x>=camera.m_Image->width) crop_x=camera.m_Image->width-1;  
    148169    if (crop_y<0) crop_x=0; 
    149     if (crop_y>=camera.m_Image->width) crop_x=camera.m_Image->width;  
     170    if (crop_y>=camera.m_Image->height) crop_y=camera.m_Image->height-1;  
    150171    if (crop_w+crop_x>camera.m_Image->width) 
    151172    {  
     
    173194    blobs = CBlobResult( thresh.m_Image, NULL, 255 ); 
    174195    // exclude the ones smaller than param2 value 
    175     blobs.Filter( blobs, B_EXCLUDE, CBlobGetArea(), B_LESS, 100); 
     196    blobs.Filter( blobs, B_EXCLUDE, CBlobGetArea(), B_LESS, 10); 
    176197 
    177198    CBlob *currentBlob; 
     
    209230    } 
    210231     
     232    list<CvRect> allrects; 
     233 
    211234    for (int i = 0; i < blobs.GetNumBlobs(); i++ ) 
    212235    { 
    213236        currentBlob = blobs.GetBlob(i); 
    214         //currentBlob->FillBlob( camera.m_Image, CV_RGB(255,0,0)); 
    215  
    216         CvRect rect = currentBlob->GetBoundingBox(); 
     237        allrects.push_back(currentBlob->GetBoundingBox()); 
     238    } 
     239 
     240    list<CvRect> filteredrects=allrects; 
     241 
     242    /* for (list<CvRect>::iterator i=allrects.begin();  
     243         i!=allrects.end(); ++i) 
     244    { 
     245        bool in=false; 
     246        for (list<CvRect>::iterator j=allrects.begin();  
     247             j!=allrects.end(); ++j) 
     248        { 
     249            if (Inside(*i,*j)) in=true; 
     250        } 
     251        if (!in) filteredrects.push_back(*i);     
     252        }*/ 
     253 
     254    unsigned int instance = rand(); 
     255 
     256    unsigned int count=0; 
     257    for (list<CvRect>::iterator i=filteredrects.begin();  
     258         i!=filteredrects.end(); ++i) 
     259    { 
     260        CvRect rect = *i; 
    217261 
    218262        if (key=='s') 
     
    222266             
    223267            char buf[256]; 
    224             sprintf(buf,"islands/island-%d-%d-%d.png",i, 
     268            sprintf(buf,"islands/island-%d-%d-%d.png",count, 
    225269                    rect.x+rect.width/2, 
    226270                    rect.y+rect.height/2); 
    227271            cerr<<"saving "<<buf<<endl; 
    228272            island.Save(buf); 
     273 
     274            sprintf(buf,"dump/island-%d-%d-%d-%d.png", 
     275                    instance, 
     276                    count, 
     277                    rect.x+rect.width/2, 
     278                    rect.y+rect.height/2); 
     279            cerr<<"saving "<<buf<<endl; 
     280            island.Save(buf); 
     281 
    229282        } 
    230283        else 
    231284        { 
    232             char buf[256]; 
    233             sprintf(buf,"%d",currentBlob->GetID()); 
    234             cvPutText(camera.m_Image, buf, cvPoint(crop_x+rect.x+rect.width/2, 
    235                                                    crop_y+rect.y+rect.height/2),  
    236                       &m_Font, colors[0]); 
    237              
    238285            cvRectangle(camera.m_Image,  
    239286                        cvPoint(crop_x+rect.x,crop_y+rect.y),  
     
    242289                        colors[1]); 
    243290        } 
     291        count++; 
    244292    } 
    245293 
     
    261309    char buf[256]; 
    262310    sprintf(buf,"spirit: %s thresh: %d", spirits[spirit%3], t); 
    263     cvPutText(camera.m_Image, buf, cvPoint(10,10),  
     311    cvPutText(camera.m_Image, buf, cvPoint(10,20),  
    264312              &m_Font, colors[0]); 
    265313 
Note: See TracChangeset for help on using the changeset viewer.