Skip to content
Snippets Groups Projects
ofApp.cpp 5.07 KiB
Newer Older
Louis James's avatar
Louis James committed
#include "ofApp.h"

using namespace ofxCv;
using namespace cv;

// Destructor
ofApp::~ofApp(){
Louis James's avatar
Louis James committed
    cam.close();
Louis James's avatar
Louis James committed
//--------------------------------------------------------------
void ofApp::setup() {
Louis James's avatar
Louis James committed
    cam.listDevices();
    // camera and window setup
Louis James's avatar
Louis James committed
    int wwidth = 1920;
    int wheight = 1080;
    ofSetWindowShape(wwidth, wheight);
    cam.setDeviceID(camId);
    if(camId==2){
        cam.setup(1920, 1080);
    } else if(camId==0){
        cam.setup(640, 480);
    }
    //contourFinder.setInvert(true); // find black instead of white
    // initialise gui
Louis James's avatar
Louis James committed

Louis James's avatar
Louis James committed
    gui.setup();
Louis James's avatar
Louis James committed
    // Initialise gui and parameters
    for(int i = 0; i < num_colours; i++){
        ofParameter<float> t;
        ofParameter<bool> b;
        ofParameter<bool> cc;
        ofxCv::ContourFinder cf;
        thresholds.push_back(t);
        trackHues.push_back(b);
        changeColours.push_back(cc);
        //contourFinders.push_back(cf);
        sharedState->contourFinders.push_back(cf);
Louis James's avatar
Louis James committed
        targetColours.push_back(ofColor(0,0,0));
        gui.add(thresholds[i].set("Threshold " + to_string(i), 255,0,255));
Louis James's avatar
Louis James committed
        gui.add(trackHues[i].set("Track Hue/Sat colour "+to_string(i), false));
        gui.add(changeColours[i].set("Change colour "+to_string(i), false));

        sharedState->contourFinders[i].setMinArea(10);
        sharedState->contourFinders[i].setMaxArea(40);
        sharedState->contourFinders[i].setMinAreaRadius(40);
        sharedState->contourFinders[i].setMaxAreaRadius(350);
Louis James's avatar
Louis James committed
    }
    for(int i = 0; i < 4; i++){
        vn.push_back(false);
    }
    // img1.load("pic1.png");
    // img1Pix = img1.getPixels();

//    for(int i = 0; i < img1Pix.size(); i++){
//    }
Louis James's avatar
Louis James committed
//--------------------------------------------------------------
void ofApp::update() {
Louis James's avatar
Louis James committed
    // update camera
    cam.update();
    camPix = cam.getPixels();
    camPix.cropTo(camPix, 100, 100, 300, 400);
Louis James's avatar
Louis James committed
    // check new frame
    if(cam.isFrameNew()) {
        // Loop for number of colours and track target colours
        for(int i = 0; i < num_colours; i++){
            sharedState->contourFinders[i].setTargetColor(targetColours[i], trackHues[i] ? TRACK_COLOR_HS : TRACK_COLOR_RGB);
            sharedState->contourFinders[i].setThreshold(thresholds[i]);
            sharedState->contourFinders[i].findContours(camPix);
Louis James's avatar
Louis James committed
        }
Louis James's avatar
Louis James committed
    }
//--------------------------------------------------------------
void ofApp::draw() {
    ofSetColor(255);
    // cam.draw(0, 0);
    camImage.setFromPixels(camPix);
    camImage.draw(0,0);
    ofSetLineWidth(2);
    gui.draw();
    // Draw contours found
    for(int i=0; i < num_colours; i ++)
        sharedState->contourFinders[i].draw();
Louis James's avatar
Louis James committed
    // Draw tracking
    ofPushMatrix();
    ofTranslate(700,10);
    for(int i=0; i < num_colours; i ++){
Louis James's avatar
Louis James committed
        ofTranslate(0, 75);
        ofFill();
        ofSetColor(0);
        ofDrawRectangle(-3, -3, 64+6, 64+6);
        ofSetColor(targetColours[i]);
        ofDrawRectangle(0, 0, 64, 64);
    // Draw anchor points and highlight when hovered
    ofPushMatrix();
    for(int i = 0; i < 4; i++){
        ofSetColor(100, 244, 244, 100);
        ofFill();
        ofDrawCircle(sharedState->proPoints[i].x, sharedState->proPoints[i].y, 10);
        if (vn[i]==true){
            ofNoFill();
            ofDrawCircle(sharedState->proPoints[i].x, sharedState->proPoints[i].y, 30);
        }
    }
    ofPopMatrix();

    // img1.setFromPixels(img1Pix);
    // img1.draw(700,200);

    // Debugging
    //cout << targetColours.size() << endl;
Louis James's avatar
Louis James committed
//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button) {
    for(int i = 0; i < num_colours; i++) {
Louis James's avatar
Louis James committed
        if(changeColours[i]==true) targetColours[i]=cam.getPixels().getColor(x, y);
Louis James's avatar
Louis James committed
}

//--------------------------------------------------------------
void ofApp::keyPressed(int key){

}

//--------------------------------------------------------------
void ofApp::keyReleased(int key){

}

//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y ){
    // Anchor hover booleans
    for(int i = 0; i < 4; i++){
        if (ofDist(mouseX, mouseY, sharedState->proPoints[i].x, sharedState->proPoints[i].y) < 20){
            vn[i] = true;
        } else {
            vn[i] = false;
        }
    }

}

//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button){
    // Control anchors
    for(int i = 0; i < 4; i++){
        if (ofDist(mouseX, mouseY, sharedState->proPoints[i].x, sharedState->proPoints[i].y) < 20){
            sharedState->proPoints[i].x = mouseX;
            sharedState->proPoints[i].y = mouseY;
            sharedState->setvx(i, mouseX);
            sharedState->setvy(i, mouseY);


//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::mouseEntered(int x, int y){

}