diff options
Diffstat (limited to 'offsetProject')
| -rw-r--r-- | offsetProject/src/imageStore.h | 34 | ||||
| -rw-r--r-- | offsetProject/src/ofApp.cpp | 28 | ||||
| -rw-r--r-- | offsetProject/src/ofApp.h | 2 |
3 files changed, 49 insertions, 15 deletions
diff --git a/offsetProject/src/imageStore.h b/offsetProject/src/imageStore.h index 8d1b584..a2bd39d 100644 --- a/offsetProject/src/imageStore.h +++ b/offsetProject/src/imageStore.h @@ -5,6 +5,8 @@ #define MIN_TILE_SIZE 8 #define MAX_TILE_SIZE 16 +#define FLANN_MATRIX_SIZE 3 + #include "ofMain.h" #include "ofxJSONElement.h" #include "ofxOpenCv.h" @@ -51,7 +53,7 @@ class imageStore : public ofThread{ img.setUseTexture(true); img.update(); images["000000"]=img; - colours["000000"]=ofColor(0,0,0); + //colours["000000"]=ofColor(0,0,0); } ~imageStore(){ @@ -113,6 +115,22 @@ class imageStore : public ofThread{ Matrix<float> query(test,1,3); Matrix<int> indices(new int[1], query.rows, 1); Matrix<float> dists(new float[1], query.rows, 1); + index->knnSearch(query, indices, dists, 1,SearchParams(10)); + im=*imageptrs[*indices[0]]; + //int i=rand()%imageptrs.size(); + //im=images[imageptrs[i]]; + //cerr<<"returning image "<<i<<endl; + unlock(); + } + return im; + } + + ofImage& get_image(float* data){ + ofImage& im=images.begin()->second; + if( lock() ){ + Matrix<float> query(data,1,FLANN_MATRIX_SIZE*FLANN_MATRIX_SIZE*3); + Matrix<int> indices(new int[1], query.rows, 1); + Matrix<float> dists(new float[1], query.rows, 1); index->knnSearch(query, indices, dists, 1,SearchParams(4)); im=*imageptrs[*indices[0]]; //int i=rand()%imageptrs.size(); @@ -131,10 +149,14 @@ class imageStore : public ofThread{ void add_data(const ofImage& _img){ ofImage img=_img; - img.resize(1,1); - data.push_back(img.getPixels()[0]); - data.push_back(img.getPixels()[1]); - data.push_back(img.getPixels()[2]); + img.resize(FLANN_MATRIX_SIZE,FLANN_MATRIX_SIZE); + for (int i=0;i<FLANN_MATRIX_SIZE;i++){ + for (int j=0;j<FLANN_MATRIX_SIZE;j++){ + data.push_back(img.getPixels()[(j*FLANN_MATRIX_SIZE+i)*3]); + data.push_back(img.getPixels()[(j*FLANN_MATRIX_SIZE+i)*3+1]); + data.push_back(img.getPixels()[(j*FLANN_MATRIX_SIZE+i)*3+2]); + } + } } //-------------------------- @@ -168,7 +190,7 @@ class imageStore : public ofThread{ } //build the flann index - Matrix<float> dataset(&data[0],data.size()/3,3); + Matrix<float> dataset(&data[0],data.size()/(3*FLANN_MATRIX_SIZE*FLANN_MATRIX_SIZE),3*FLANN_MATRIX_SIZE*FLANN_MATRIX_SIZE); index= new Index<L2<float> >(dataset, KDTreeIndexParams(4)); index->buildIndex(); diff --git a/offsetProject/src/ofApp.cpp b/offsetProject/src/ofApp.cpp index 63b0791..51795f5 100644 --- a/offsetProject/src/ofApp.cpp +++ b/offsetProject/src/ofApp.cpp @@ -76,6 +76,8 @@ void ofApp::setup() { mode=MODE_COLOURTILES; fullscreen=false; + + tiledata=new float[FLANN_MATRIX_SIZE*FLANN_MATRIX_SIZE*3]; } //-------------------------------------------------------------- @@ -103,7 +105,7 @@ void ofApp::update() { int h=ceil(ofGetHeight()/MAX_TILE_SIZE); int w=(h*4)/3; depthImage.resize(w,h); - colourImage.resize(w,h); + colourImage.resize(w*FLANN_MATRIX_SIZE,h*FLANN_MATRIX_SIZE); // mark pixels and texture dirty depthImage.flagImageChanged(); @@ -145,22 +147,29 @@ void ofApp::draw() { switch(mode){ case MODE_COLOURTILES: //store.draw(); - xstart=(ofGetWidth()/2)-((colourImage.getHeight()/2)*MAX_TILE_SIZE); - ystart=(ofGetHeight()/2)-((colourImage.getHeight()/2)*MAX_TILE_SIZE); + xstart=(ofGetWidth()/2)-((depthImage.getHeight()/2)*MAX_TILE_SIZE); + ystart=(ofGetHeight()/2)-((depthImage.getHeight()/2)*MAX_TILE_SIZE); kinexstart=(colourImage.getWidth()/2)-(colourImage.getHeight()/2); ofPushMatrix(); ofTranslate(xstart,ystart); w=colourImage.getWidth(); for (int i=0;i<depthImage.getHeight();i++){ for (int j=0;j<depthImage.getHeight();j++){ - uint8_t* ppt=&colourImage.getPixels()[(j*w+(w-(i+kinexstart)))*3]; - + //uint8_t* ppt=&colourImage.getPixels()[((j*FLANN_MATRIX_SIZE)*w+(w-((i*FLANN_MATRIX_SIZE)+kinexstart)))*3]; - //store.get_image(ofColor(ppt[0],ppt[1],ppt[2])).draw(i*MAX_TILE_SIZE,j*MAX_TILE_SIZE); + for (int k=0;k<FLANN_MATRIX_SIZE;k++){ + for (int l=0;l<FLANN_MATRIX_SIZE;l++){ + tiledata[(l*FLANN_MATRIX_SIZE+k)*3]=colourImage.getPixels()[((j*FLANN_MATRIX_SIZE+l)*w+(w-((i*FLANN_MATRIX_SIZE+k)+kinexstart)))*3]; + tiledata[(l*FLANN_MATRIX_SIZE+k)*3+1]=colourImage.getPixels()[((j*FLANN_MATRIX_SIZE+l)*w+(w-((i*FLANN_MATRIX_SIZE+k)+kinexstart)))*3+1]; + tiledata[(l*FLANN_MATRIX_SIZE+k)*3+2]=colourImage.getPixels()[((j*FLANN_MATRIX_SIZE+l)*w+(w-((i*FLANN_MATRIX_SIZE+k)+kinexstart)))*3+2]; + } + } + //ofImage& im=store.get_image(ofColor(ppt[0],ppt[1],ppt[2])); //ofSetColor(ppt[0],ppt[1],ppt[2]); //ofRect(i*MAX_TILE_SIZE,j*MAX_TILE_SIZE,MAX_TILE_SIZE,MAX_TILE_SIZE); - ofImage& im=store.get_image(ppt[0],ppt[1],ppt[2]); + //ofImage& im=store.get_image(ppt[0],ppt[1],ppt[2]); + ofImage& im=store.get_image(tiledata); if (im.isUsingTexture()) im.draw(i*MAX_TILE_SIZE,j*MAX_TILE_SIZE); } } @@ -186,8 +195,9 @@ void ofApp::draw() { //-------------------------------------------------------------- void ofApp::exit() { - - + delete tiledata; + kinect.setCameraTiltAngle(0); // zero the tilt on exit + kinect.close(); } //-------------------------------------------------------------- diff --git a/offsetProject/src/ofApp.h b/offsetProject/src/ofApp.h index a718aa1..f3aa3be 100644 --- a/offsetProject/src/ofApp.h +++ b/offsetProject/src/ofApp.h @@ -37,5 +37,7 @@ public: ofxCvGrayscaleImage depthImage,depthImage2; ofxKinect kinect; + float* tiledata; + bool fullscreen; }; |
