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;
}