Skip to content
Snippets Groups Projects
sandbox.cpp 1.93 KiB
#include "../../inc/sandbox.h"


/*
 *   MAIN
 */

Sandbox::Sandbox(){
    projection = new Projection();
    camera = new Camera();
    beamer = new Beamer();
}

Sandbox::~Sandbox(){
    delete beamer;
    delete camera;
    delete projection;
}


/*
 *   PUBLIC
 */

int Sandbox::init(){
    return camera->start();
}

void Sandbox::captureFrame(){
    camera->capture();
}

cv::Mat_<cv::Vec3b> Sandbox::getColorFrame(){
    return camera->getColorFrame()(camera->getCroppingMask());
}

cv::Mat_<float> Sandbox::getDepthFrame(){
    return camera->getDepthFrame()(camera->getCroppingMask());
}

cv::Mat_<cv::Vec3b> Sandbox::adjustProjection(cv::Mat_<cv::Vec3b> &frame, cv::Mat_<float> &depth){
    
    if(projectedFrame.empty()){
        projectedFrame.create(beamer->getHeight(), beamer->getWidth());
    }

    projectedFrame = cv::Vec3b(0, 0, 0);
    projection->adjustFrame(depth, frame, projectedFrame, camera, beamer->getPosition());

    // frame after process
    //cv::dilate(projectedFrame, projectedFrame, cv::Mat(), cv::Point(-1, -1), 2, 1, 1);
    //cv::erode(projectedFrame, projectedFrame, cv::Mat(), cv::Point(-1, -1), 2, 1, 1);
    
    return projectedFrame;
}

cv::Mat_<cv::Vec3b> Sandbox::adjustProjection(cv::Mat_<cv::Vec3b> &frame){
    
    captureFrame();
    cv::Mat_<float> depth = getDepthFrame();
    return adjustProjection(frame, depth);
}

int Sandbox::loadConfig(char *path){

    int err = SandboxConfig::loadAdjustingMatrixFrom(path, projection);
    if(err){ return err; }
    err = SandboxConfig::loadDistanceToSandboxTopFrom(path, projection);
    if(err){ return err; }
    err = SandboxConfig::loadCroppingMaskFrom(path, camera);
    if(err){ return err; }
    err = SandboxConfig::loadBeamerResolutionFrom(path, beamer);
    if(err){ return err; }
    err = SandboxConfig::loadBeamerPositionFrom(path, beamer);
    if(err){ return err; }
    return 0;
}

int Sandbox::loadConfig(){

    return loadConfig(defaultConfigFilePath);
}