Newer
Older
// Destructor
ofApp::~ofApp(){
// cam.listDevices();
int wwidth = 1920;
int wheight = 1080;
ofSetWindowShape(wwidth, wheight);
// Select camera
// Alternative camera settings for different cams
ss->rectPos.x = 20, ss->rectPos.y = 20, ss->width_height.x = 1800, ss->width_height.y = 900;
ss->rectPos.x = 20, ss->rectPos.y = 20, ss->width_height.x = 300, ss->width_height.y = 200;
// Initialise gui and parameters
gui.setPosition(50,500);
ss->settings.loadFile("settings.xml");
ss->settings.pushTag("contourFinders");
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);
// Load values from settings.xml and set values
ss->settings.pushTag("contourFinder", i);
ss->contourFinders.push_back(cf);
ss->settings.pushTag("threshold");
int r = ss->settings.getValue("r", 0);
int g = ss->settings.getValue("g", 0);
int b_ = ss->settings.getValue("b", 0);
ss->settings.popTag();
targetColours.push_back(ofColor(r, g, b_));
// cout << r << g << b_ << endl;
bool trackHue = ss->settings.getValue("trackHue", 0);
gui.add(thresholds[i].set("Threshold " + to_string(i), 0,0,0));
gui.add(trackHues[i].set("Track Hue/Sat colour "+to_string(i), trackHue));
gui.add(changeColours[i].set("Change colour "+to_string(i), false));
int minArea = ss->settings.getValue("minArea", 0);
int maxArea = ss->settings.getValue("maxArea", 0);
int minAreaRadius = ss->settings.getValue("minAreaRadius", 0);
int maxAreaRadius = ss->settings.getValue("maxAreaRadius", 0);
ss->contourFinders[i].setMinArea(minArea);
ss->contourFinders[i].setMaxArea(maxArea);
ss->contourFinders[i].setMinAreaRadius(minAreaRadius);
ss->contourFinders[i].setMaxAreaRadius(maxAreaRadius);
ss->settings.popTag();
for(int i = 0; i < 4; i++){
vn.push_back(false);
}
// corner booleans initialise to false
xyb=false;
whb=false;
// ss->settings.saveFile("settings.xml");
camPix.cropTo(camPix, ss->rectPos.x, ss->rectPos.y, ss->width_height.x, ss->width_height.y);
// check new frame
if(cam.isFrameNew()) {
// Loop for number of colours and track target colours
for(int i = 0; i < num_colours; i++){
ss->contourFinders[i].setTargetColor(targetColours[i], trackHues[i] ? TRACK_COLOR_HS : TRACK_COLOR_RGB);
ss->contourFinders[i].setThreshold(thresholds[i]);
ss->contourFinders[i].findContours(camPix);
//--------------------------------------------------------------
// Draw camera
// Draw gui
ofPushMatrix();
// Draw contours found
ofTranslate(ss->rectPos.x, ss->rectPos.y);
for(int i=0; i < num_colours; i ++)
ss->contourFinders[i].draw();
ofPopMatrix();
ofPushMatrix();
ofTranslate(700,10);
for(int i=0; i < num_colours; i ++){
ofTranslate(0, 75);
ofFill();
ofSetColor(0);
ofDrawRectangle(-3, -3, 64+6, 64+6);
ofSetColor(targetColours[i]);
ofDrawRectangle(0, 0, 64, 64);
}
ofPopMatrix();
// draw crop rect and circles
ofPushMatrix();
ofSetColor(100, 244, 244, 100);
ofDrawCircle(ss->rectPos.x, ss->rectPos.y, 10);
ofDrawCircle(ss->rectPos.x + ss->width_height.x,
ss->rectPos.y + ss->width_height.y, 10);
ofNoFill();
if(xyb==true){
ofDrawCircle(ss->rectPos.x, ss->rectPos.y, 30);
ofDrawCircle(ss->rectPos.x+ss->width_height.x, ss->rectPos.y+ss->width_height.y, 30);
ofFill();
ofSetColor(ofColor(255, 200, 233, 40));
ofDrawRectangle(ss->rectPos.x, ss->rectPos.y,
ss->width_height.x, ss->width_height.y);
ofPopMatrix();
// img1.setFromPixels(img1Pix);
// img1.draw(700,200);
// Debugging
//cout << targetColours.size() << endl;
void ofApp::mousePressed(int x, int y, int button) {
for(int i = 0; i < num_colours; i++) {
if(changeColours[i]==true) targetColours[i]=cam.getPixels().getColor(x, y);
//--------------------------------------------------------------
void ofApp::keyPressed(int key){
// Save settings to disk
if(key=='s') {
ss->settings.saveFile("settings.xml");
saveSettings();
}
// Toggle corners bool
if(key=='c'){
if(ss->corners) {
ss->corners=false;
} else {
ss->corners=true;
}
}
}
//--------------------------------------------------------------
void ofApp::keyReleased(int key){
}
//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y ){
if(ofDist(mouseX, mouseY, ss->rectPos.x, ss->rectPos.y) < 20){
if (ofDist(mouseX, mouseY,
ss->rectPos.x + ss->width_height.x,
ss->rectPos.y + ss->width_height.y) < 20) {
whb = true;
}
}
//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button){
// Update crop control anchors
ss->set_rectPos(mouseX, mouseY);
ss->set_width_height(mouseX-ss->rectPos.x, mouseY-ss->rectPos.y);
}
}
//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button){
}
//--------------------------------------------------------------
void ofApp::mouseEntered(int x, int y){
}
//--------------------------------------------------------------
void ofApp::saveSettings() {
ss->settings.pushTag("contourFinders");
for(int i = 0; i < ss->num_colours; i++){
ss->settings.pushTag("contourFinder", i);
ss->settings.setValue("trackHue", trackHues[i]);
ss->settings.pushTag("threshold");
ss->settings.setValue("r", targetColours[i].r);
ss->settings.setValue("g", targetColours[i].g);
ss->settings.setValue("b", targetColours[i].b);
}
ss->settings.popTag();
cout << "------------------------------------------------------------------------------" << endl;
cout << "--------------------------- settings saved -----------------------------------" << endl;
cout << "------------------------------------------------------------------------------" << endl;
cout << "------------------------------------------------------------------------------" << endl;