jeonghopark
5/11/2016 - 1:09 PM

RCCar_04_clearData

RCCar_04_clearData

import gab.opencv.*;
import processing.video.*;
import java.awt.Rectangle;
import processing.pdf.*;


Capture video;

OpenCV opencv;
OpenCV videoSource;

PImage src, colorFilteredImage;
ArrayList<Contour> contours;

int rangeLow = 20;
int rangeHigh = 35;

ArrayList<PVector> legoYCarPos = new ArrayList();

JSONObject json;
JSONArray mouseEvents = new JSONArray();

Rectangle legoYCar = new Rectangle();

boolean saveOneFrame = false;

//--------------------------------------------------------------
void setup() {
  video = new Capture(this, 640, 480);
  video.start();

  opencv = new OpenCV(this, video.width, video.height);
  videoSource = new OpenCV(this, video.width, video.height);
  contours = new ArrayList<Contour>();

  size(640, 480);
}



//--------------------------------------------------------------
void draw() {



  if (video.available()) {
    video.read();
  }


  videoSource.loadImage(video);

  videoSource.useColor();
  src = videoSource.getSnapshot();

  image(src, 0, 0);


  legoYCar = openCVColorTracking(video, rangeLow, rangeHigh);

  if (legoYCarPos.size()>0) {
    for (int i = 0; i < legoYCarPos.size(); i++) {
      ellipse(legoYCarPos.get(i).x, legoYCarPos.get(i).y, 10, 10);
    }
  }

  if (keyPressed) {
    if (key == 'r') {
      dataSave();
    }
  }


  image(src, 640, 0, 320, 240);

  drawTrackingGuide(legoYCar);


  if (saveOneFrame == true) {
    beginRecord(PDF, "point.pdf");
    background(120);
    if (legoYCarPos.size()>0) {
      for (int i = 0; i < legoYCarPos.size(); i++) {
        point(legoYCarPos.get(i).x, legoYCarPos.get(i).y);
      }
    }
  }



  if (saveOneFrame == true) {
    endRecord();
    saveOneFrame = false;
  }
}



//--------------------------------------------------------------
void drawTrackingGuide(Rectangle _r) {

  pushStyle();
  noStroke(); 
  fill(255, 0, 0);
  Rectangle _pos = _r;
  ellipse(_pos.x + _pos.width/2, _pos.y + _pos.height/2, 30, 30);

  noFill(); 
  strokeWeight(2); 
  stroke(255, 0, 0);
  rect(_pos.x, _pos.y, _pos.width, _pos.height);

  popStyle();
  
}


//--------------------------------------------------------------
void mousePressed() {

  color c = get(mouseX, mouseY);
  println("r: " + red(c) + " g: " + green(c) + " b: " + blue(c));

  int hue = int(map(hue(c), 0, 255, 0, 180));
  println("hue to detect: " + hue);

  rangeLow = hue - 5;
  rangeHigh = hue + 5;
}




//--------------------------------------------------------------
void keyPressed() {

  if (key == 'd') {
    legoYCarPos.clear();
  } else if (key == 'p') {
    saveOneFrame = true;
  } else if (key == 'c') {
    legoYCarPos.clear();
  }
  
  
}


//--------------------------------------------------------------
void dataSave() {

  //legoYCar = openCVColorTracking(video, rangeLow, rangeHigh);

  PVector _v = new PVector(legoYCar.x + legoYCar.width/2, legoYCar.y + legoYCar.height/2);
  legoYCarPos.add(_v);

  for (int i = 0; i < legoYCarPos.size(); i++) {

    JSONObject _mousePos = new JSONObject();

    _mousePos.setInt("id", i);
    _mousePos.setInt("mouse X", int(legoYCarPos.get(i).x));
    _mousePos.setInt("mouse Y", int(legoYCarPos.get(i).y));

    mouseEvents.setJSONObject(i, _mousePos);
  }

  json = new JSONObject();
  json.setJSONArray("MousePosition", mouseEvents);

  saveJSONObject(json, "data/yellowCarPos.json");
}


//--------------------------------------------------------------
// Color Tracking function
Rectangle openCVColorTracking(Capture _v, int _rLow, int _rHigh) {

  Rectangle _trackRect = new Rectangle();

  opencv.loadImage(_v);

  opencv.useColor();
  //src = opencv.getSnapshot();

  opencv.useColor(HSB);

  opencv.setGray(opencv.getH().clone());

  opencv.inRange(_rLow, _rHigh);

  //colorFilteredImage = opencv.getSnapshot();

  contours = opencv.findContours(true, true);

  if (contours.size() > 0) {
    Contour biggestContour = contours.get(0);
    Rectangle r = biggestContour.getBoundingBox();
    _trackRect = r;
  }

  return _trackRect;
}