diff options
Diffstat (limited to 'offsetProject/src')
| -rw-r--r-- | offsetProject/src/ofApp.cpp | 298 | ||||
| -rw-r--r-- | offsetProject/src/ofApp.h | 2 |
2 files changed, 56 insertions, 244 deletions
diff --git a/offsetProject/src/ofApp.cpp b/offsetProject/src/ofApp.cpp index 02875f2..00c7f57 100644 --- a/offsetProject/src/ofApp.cpp +++ b/offsetProject/src/ofApp.cpp @@ -1,71 +1,66 @@ #include "ofApp.h" +/* +so far so good, NOW -//-------------------------------------------------------------- -void ofApp::setup() { - ofSetLogLevel(OF_LOG_WARNING); - - // enable depth->video image calibration - kinect.setRegistration(true); - - kinect.init(); - //kinect.init(true); // shows infrared instead of RGB video image - //kinect.init(false, false); // disable video image (faster fps) - - kinect.open(); // opens first available kinect - //kinect.open(1); // open a kinect by id, starting with 0 (sorted by serial # lexicographically)) - //kinect.open("A00362A08602047A"); // open a kinect using it's unique serial # - - // print the intrinsic IR sensor values - if(kinect.isConnected()) { - ofLogNotice() << "sensor-emitter dist: " << kinect.getSensorEmitterDistance() << "cm"; - ofLogNotice() << "sensor-camera dist: " << kinect.getSensorCameraDistance() << "cm"; - ofLogNotice() << "zero plane pixel size: " << kinect.getZeroPlanePixelSize() << "mm"; - ofLogNotice() << "zero plane dist: " << kinect.getZeroPlaneDistance() << "mm"; - } - - - colourImage.allocate(kinect.width, kinect.height); - depthImage.allocate(kinect.width, kinect.height); - - farThreshold = 70; - - ofSetFrameRate(60); - - // zero the tilt on startup - angle = 0; - kinect.setCameraTiltAngle(angle); +threading - //start with the largest size square - //get the depth, if below a certain size, subdivide and repeat +parse response and identify new pictures +save pictures & metadata - rather than reloading each time? +local images format +do we need any metadata? I guess not other than to know the tag id +could save with the tag id as the name of file, simpler - //OR start at the smallest size, if adjacent squares are the same, work up +how exactly do we parse or mipmap the images +do we worry about memory - I guess not - //1 - create a pyramid of mip maps of depth - //2 - work upwards +identify the images - //a find layout of largest tiles - //b extend captured frame to this ratio - //c mip map this down into prepared containers +image save- reload system (? even necessary ?) +camera + button +transitions - int tiles_w=ceil((float)kinect.width/(MAX_TILE_SIZE*2))*2; - int tiles_h=ceil((float)kinect.height/(MAX_TILE_SIZE*2))*2; - extend_w=(tiles_w)*MAX_TILE_SIZE; - extend_h=(tiles_h)*MAX_TILE_SIZE; +should the loader own the images? +should the whole image bank be locked while loading? +alternatively each image could have a lock? - threadedImage - //get number of levels - levels=0; - for (int i=MIN_TILE_SIZE;i<=MAX_TILE_SIZE;i*=2) { - levels++; - } +or true mip map via drawsubsection? + +start with a max size say 64 - should be 16k inc mip maps + +graphics card has 2048MB +9% in use by ubuntu +117964 textures +I wonder is this faster with shared memory.. - colourTiles.resize(levels); - depthTiles.resize(levels); +load app +get list of images in defined folder +load them and create mip maps +store indexed by file stub - for (int i=MIN_TILE_SIZE,l=0;i<=MAX_TILE_SIZE;i*=2,l++) { - colourTiles[l].allocate(extend_w/i,extend_h/i); - depthTiles[l].allocate(extend_w/i,extend_h/i); - cerr<<"level "<<l<<" mipmap: "<<colourTiles[l].getWidth()<<"x"<<colourTiles[l].getHeight()<<endl; +when a new image comes in +load and create mip maps +save to + +*/ +//-------------------------------------------------------------- +void ofApp::setup() { + ofSetLogLevel(OF_LOG_WARNING); + + ofSetFrameRate(60); + + ofDirectory image_path(ofToString(IMAGE_STORE_SIZE)+"/"); + cerr<<"image path: "<<image_path.getAbsolutePath()<<endl; + if (image_path.exists()){ + image_path.listDir(); + cerr<<"image path found, "<<image_path.size()<<" images"<<endl; + for (int i=0;i<image_path.size();i++){ + cerr<<image_path.getFiles()[i].getFileName()<<endl; + } + } + else { + cerr<<"creating image path"<<endl; + image_path.create(); } mode=MODE_COLOURTILES; @@ -78,58 +73,10 @@ void ofApp::update() { ofSetWindowTitle(ofToString(ofGetFrameRate())); - kinect.update(); - // there is a new frame and we are connected - if(kinect.isFrameNew()) { - - depthImage.setFromPixels(kinect.getDepthPixels(), kinect.width, kinect.height); - colourImage.setFromPixels(kinect.getPixels(), kinect.width, kinect.height); - - depthImage.threshold(farThreshold); - - //threshold needs to be multiplied by the original - depthImage2.setFromPixels(kinect.getDepthPixels(), kinect.width, kinect.height); - depthImage*=depthImage2; - - depthImage.extend(extend_w,extend_h); - colourImage.extend(extend_w,extend_h); - - // mark pixels and texture dirty - depthImage.flagImageChanged(); - colourImage.flagImageChanged(); - - ofxCvColorImage *prevCol=&colourImage; - ofxCvGrayscaleImage *prevDepth=&depthImage; - - for (int i=0;i<colourTiles.size();i++){ - colourTiles[i].scaleIntoMe(*prevCol); - depthTiles[i].scaleIntoMe(*prevDepth); - prevCol=&colourTiles[i]; - prevDepth=&depthTiles[i]; - - colourTiles[i].flagImageChanged(); - depthTiles[i].flagImageChanged(); - } - } } -void ofApp::checktile(int level,int x,int y,int size){ - int levels_factor=128/levels; - if (level>0&&max(0,depthTiles[level].getPixels()[y*((int)depthTiles[level].getWidth())+x]-128)>level*levels_factor){ - for (int i=0;i<2;i++){ - for (int j=0;j<2;j++){ - checktile(level-1,x*2+i,y*2+j,size/2); - } - } - } - else { - ofSetColor(colourTiles[level].getPixels()[(y*((int)colourTiles[level].getWidth())+x)*3], - colourTiles[level].getPixels()[(y*((int)colourTiles[level].getWidth())+x)*3+1], - colourTiles[level].getPixels()[(y*((int)colourTiles[level].getWidth())+x)*3+2]); - ofRect(x*size,y*size,size,size); - } -} + //-------------------------------------------------------------- void ofApp::draw() { @@ -138,79 +85,7 @@ void ofApp::draw() { ofSetColor(255, 255, 255); - int pixelsize=ofGetWidth()/colourTiles[levels-1].getWidth(); - - - switch(mode){ - case MODE_COLOURTILES: - - //recursively draw pixels - - //int yoffset= - - for (int i=0;i<colourTiles[levels-1].getWidth();i++){ - for (int j=0;j<colourTiles[levels-1].getHeight();j++){ - checktile(levels-1,i,j,pixelsize); - } - } - break; - - case MODE_DEPTH: - - depthImage.draw(0,0,ofGetWidth(),ofGetHeight()); - break; - - case MODE_COMPONENTS: - - depthImage.draw(0,0, 640,480); - colourImage.draw(640,0, 640,480); - - int xoffs=10; - for (int i=0;i<depthTiles.size();i++){ - depthTiles[i].draw(xoffs,500,depthTiles[i].getWidth(),depthTiles[i].getHeight()); - colourTiles[i].draw(xoffs+640,500,colourTiles[i].getWidth(),colourTiles[i].getHeight()); - xoffs+=(colourTiles[i].getWidth()+10); - } - break; - - } - - - /* - - - - - - */ - - - /* - // draw from the live kinect - kinect.drawDepth(10, 10, 400, 300); - kinect.draw(420, 10, 400, 300); - - depthImage.draw(10, 320, 400, 300); - - - // draw instructions - ofSetColor(255, 255, 255); - stringstream reportStream; - - reportStream << "press p to switch between images and point cloud, rotate the point cloud with the mouse" << endl - << "set far threshold " << farThreshold - << ", fps: " << ofGetFrameRate() << endl - << "press c to close the connection and o to open it again, connection is: " << kinect.isConnected() << endl; - - if(kinect.hasCamTiltControl()) { - reportStream << "press UP and DOWN to change the tilt angle: " << angle << " degrees" << endl - << "press 1-5 & 0 to change the led mode" << endl; - } - - ofDrawBitmapString(reportStream.str(), 20, 652); - - */ } @@ -218,8 +93,7 @@ void ofApp::draw() { //-------------------------------------------------------------- void ofApp::exit() { - kinect.setCameraTiltAngle(0); // zero the tilt on exit - kinect.close(); + } @@ -227,69 +101,7 @@ void ofApp::exit() { void ofApp::keyPressed (int key) { switch (key) { - case '>': - case '.': - farThreshold ++; - if (farThreshold > 255) farThreshold = 255; - break; - - case '<': - case ',': - farThreshold --; - if (farThreshold < 0) farThreshold = 0; - break; - - - case 'w': - kinect.enableDepthNearValueWhite(!kinect.isDepthNearValueWhite()); - break; - - case 'o': - kinect.setCameraTiltAngle(angle); // go back to prev tilt - kinect.open(); - break; - - case 'c': - kinect.setCameraTiltAngle(0); // zero the tilt - kinect.close(); - break; - - case '1': - kinect.setLed(ofxKinect::LED_GREEN); - break; - - case '2': - kinect.setLed(ofxKinect::LED_YELLOW); - break; - - case '3': - kinect.setLed(ofxKinect::LED_RED); - break; - - case '4': - kinect.setLed(ofxKinect::LED_BLINK_GREEN); - break; - - case '5': - kinect.setLed(ofxKinect::LED_BLINK_YELLOW_RED); - break; - - case '0': - kinect.setLed(ofxKinect::LED_OFF); - break; - - case OF_KEY_UP: - angle++; - if(angle>30) angle=30; - kinect.setCameraTiltAngle(angle); - break; - - case OF_KEY_DOWN: - angle--; - if(angle<-30) angle=-30; - kinect.setCameraTiltAngle(angle); - break; - + case OF_KEY_LEFT: mode--; if (mode<0) mode==NUM_MODES-1; diff --git a/offsetProject/src/ofApp.h b/offsetProject/src/ofApp.h index 711dc0d..67e1b71 100644 --- a/offsetProject/src/ofApp.h +++ b/offsetProject/src/ofApp.h @@ -13,7 +13,7 @@ #define NUM_MODES 3 -#define STORE_SIZE 256 +#define IMAGE_STORE_SIZE 256 class ofApp : public ofBaseApp { |
