public void trace_initTrace(PImage img) { // dummy initCamera(), does nothing // tracetraceEnabled = true; img.loadPixels(); blob_detector = new BlobDetector(img.width, img.height); blob_detector.setResolution(1); blob_detector.computeContours(true); blob_detector.computeBlobPixels(true); blob_detector.setMinMaxPixels(10*10, img.width * img.height); blob_detector.setBLOBable(new BLOBable_blueBlobs(liveImage)); } public void trace_initCameraProcCam() { // try // { // String[] cameras = Capture.list(); // if (cameras.length > 0) { // liveCamera = new Capture(this, 640, 480, cameras[0]); // //liveCamera.start(); // traceEnabled = true; // } // } // catch (Exception e) // { // println("Exception occurred trying to look for attached webcams. Webcam will not be used. " + e.getMessage()); // traceEnabled = false; // } } //public PImage trace_buildLiveImage() //{ // //liveCamera.start(); // PImage pimg = createImage(640, 480, RGB); // pimg.loadPixels(); // if (liveCamera.available()) { // liveCamera.read(); // } // pimg.pixels = liveCamera.pixels; // // 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 = trace_convertDiewaldToRShape(contour_simple); if (shp != null) { shapeNo++; //println("adding shape " + shapeNo + " - blob: " + blob_idx + ", contour: " + contour_idx); allShapes.addChild(shp); } } else { RShape shp = trace_convertDiewaldToRShape(contour.getPixels()); if (shp != null) allShapes.addChild(shp); } } } } } // rotate image if (rotateWebcamImage) { allShapes.rotate(radians(-90)); // transform it so that top left is at 0,0. RPoint topLeft = allShapes.getTopLeft(); allShapes.translate(-topLeft.x, -topLeft.y); } return allShapes; } Map trace_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 trace_captureCurrentImage(PImage inImage) { captureShape = traceShape; } public void trace_captureCurrentImage() { // capturedImage = webcam_buildLiveImage(); if (getDisplayMachine().imageIsReady()) trace_captureCurrentImage(getDisplayMachine().getImage()); } public void trace_processLoadedImage() { trace_captureCurrentImage(getDisplayMachine().getImage()); } public void trace_saveShape(RShape sh) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss"); String dateCode = sdf.format(new java.util.Date()); String filename = shapeSavePath + shapeSavePrefix + dateCode + shapeSaveExtension; RG.saveShape(filename, sh); } //public void stop() { // liveCamera.stop(); // super.stop(); //}