summaryrefslogtreecommitdiff
path: root/offsetProject/src
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2014-03-11 14:58:03 +0000
committerTim Redfern <tim@eclectronics.org>2014-03-11 14:58:03 +0000
commit63a6970325463b3533edbf910f88750cb2d096f1 (patch)
treed9c07c6107831089a4238dd7aac00bbc956bea2d /offsetProject/src
parentc81d13d3c2d4a89d9cac3ca54cca69650ec3a52d (diff)
folder scanning and saving images
Diffstat (limited to 'offsetProject/src')
-rw-r--r--offsetProject/src/ofApp.cpp298
-rw-r--r--offsetProject/src/ofApp.h2
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 {