public PImage webcam_buildLiveImage() { liveCamera.update(); PImage pimg = createImage(640, 480, RGB); pimg.loadPixels(); pimg.pixels = liveCamera.image(); // flip the image left to right if (flipWebcamImage) { List list = new ArrayList(480); for (int r=0; r seps) { RShape allShapes = null; if (seps != null) { //println("detecting..."); int i = 0; int shapeNo = 1; allShapes = new RShape(); for (Integer key : seps.keySet()) { i++; //println("Analysing sep " + i + " of " + seps.size()); PImage sep = seps.get(key); blob_detector.setBLOBable(new BLOBable_blueBlobs(sep)); blob_detector.update(); ArrayList blob_list = blob_detector.getBlobs(); for (int blob_idx = 0; blob_idx < blob_list.size(); blob_idx++ ) { //println("Getting blob " + blob_idx + " of " + blob_list.size()); // get the current blob from the blob-list Blob blob = blob_list.get(blob_idx); // get the list of all the contours from the current blob ArrayList contour_list = blob.getContours(); // iterate through the contour_list for (int contour_idx = 0; contour_idx < contour_list.size(); contour_idx++ ) { // get the current contour from the contour-list Contour contour = contour_list.get(contour_idx); // example how to simplify a contour if (liveSimplification > 0) { // can improve speed, if the contour is needed for further work ArrayList contour_simple = Polyline.SIMPLIFY(contour, 2, 1); // repeat the simplifying process a view more times for (int simple_cnt = 0; simple_cnt < liveSimplification; simple_cnt++) { contour_simple= Polyline.SIMPLIFY(contour_simple, 2, simple_cnt); } RShape shp = webcam_convertDiewaldToRShape(contour_simple); if (shp != null) { shapeNo++; //println("adding shape " + shapeNo + " - blob: " + blob_idx + ", contour: " + contour_idx); allShapes.addChild(shp); } } else { RShape shp = webcam_convertDiewaldToRShape(contour.getPixels()); if (shp != null) allShapes.addChild(shp); } } } } } // rotate image allShapes.rotate(radians(-90)); return allShapes; } Map webcam_buildSeps(PImage img, Integer keyColour) { // create separations // pull out number of colours Set colours = null; List colourList = null; colours = new HashSet(); for (int i=0; i< img.pixels.length; i++) { colours.add(img.pixels[i]); } colourList = new ArrayList(colours); Map seps = new HashMap(colours.size()); for (Integer colour : colours) { PImage sep = createImage(img.width, img.height, RGB); sep.loadPixels(); seps.put(colour, sep); } for (int i = 0; i points) { RShape shp = null; if (points.size() > 2) { shp = new RShape(); Pixel p = points.get(0); shp.addMoveTo(float(p.x_), float(p.y_)); for (int idx = 1; idx < points.size(); idx++) { p = points.get(idx); shp.addLineTo(float(p.x_), float(p.y_)); } shp.addClose(); } return shp; } public void webcam_captureCurrentImage(PImage inImage) { processedCapturedImage = webcam_processImageForTrace(inImage); colourSeparations = webcam_buildSeps(processedCapturedImage, sepKeyColour); captureShape = webcam_traceImage(colourSeparations); } public void webcam_captureCurrentImage() { capturedImage = webcam_buildLiveImage(); webcam_captureCurrentImage(capturedImage); } public void stop() { liveCamera.stop(); super.stop(); }