Color Tracking with Multiple Cameras
in
Core Library Questions
•
10 months ago
I have trying to get two USB cameras to track a specific color. This is going to be used for hand tracking, tip of a finger colored to track. The two cameras is to get three dimensional output, to control a robot arm. Yes, i know their is easer ways to control the arm, but I would like to use this method. Here is some example code if found to track colors, how do I go about using two cameras?
- // Learning Processing
- // Daniel Shiffman
- // http://www.learningprocessing.com
- // Example 16-11: Simple color tracking
- import processing.video.*;
- // Variable for capture device
- Capture video;
- // A variable for the color we are searching for.
- color trackColor;
- void setup() {
- size(640,480);
- video = new Capture(this, width, height,15);
- // Start off tracking for red
- trackColor = color(255,0,0);
- video.start();
- smooth();
- }
- void draw() {
- // Capture and display the video
- if (video.available()) {
- video.read();
- }
- video.loadPixels();
- image(video,0,0);
- // Before we begin searching, the "world record" for closest color is set to a high number that is easy for the first pixel to beat.
- float worldRecord = 500;
- // XY coordinate of closest color
- int closestX = 0;
- int closestY = 0;
- // Begin loop to walk through every pixel
- for (int x = 0; x < video.width; x ++ ) {
- for (int y = 0; y < video.height; y ++ ) {
- int loc = x + y*video.width;
- // What is current color
- color currentColor = video.pixels[loc];
- float r1 = red(currentColor);
- float g1 = green(currentColor);
- float b1 = blue(currentColor);
- float r2 = red(trackColor);
- float g2 = green(trackColor);
- float b2 = blue(trackColor);
- // Using euclidean distance to compare colors
- float d = dist(r1,g1,b1,r2,g2,b2); // We are using the dist( ) function to compare the current color with the color we are tracking.
- // If current color is more similar to tracked color than
- // closest color, save current location and current difference
- if (d < worldRecord) {
- worldRecord = d;
- closestX = x;
- closestY = y;
- }
- }
- }
- println("x = " + closestX + " y = " + closestY);
- // We only consider the color found if its color distance is less than 10.
- // This threshold of 10 is arbitrary and you can adjust this number depending on how accurate you require the tracking to be.
- if (worldRecord < 10) {
- // Draw a circle at the tracked pixel
- fill(trackColor);
- strokeWeight(4.0);
- stroke(0);
- ellipse(closestX,closestY,16,16);
- }
- }
- void mousePressed() {
- // Save color where the mouse is clicked in trackColor variable
- int loc = mouseX + mouseY*video.width;
- trackColor = video.pixels[loc]; }
- // Learning Processing
- // Daniel Shiffman
- // http://www.learningprocessing.com
- // Example 16-11: Simple color tracking
- import processing.video.*;
- // Variable for capture device
- Capture video;
- Capture video2;
- // A variable for the color we are searching for.
- color trackColor;
- void setup() {
- size(640,480);
- video = new Capture(this, width, height,15);
- // Start off tracking for red
- trackColor = color(255,0,0);
- video.start();
- smooth();
- size(640,480);
- video2 = new Capture(this, width, height,15);
- // Start off tracking for red
- trackColor = color(255,0,0);
- video2.start();
- smooth();
- }
- void draw() {
- // Capture and display the video
- if (video.available()) {
- video.read();
- }
- video.loadPixels();
- image(video,0,0);
- // Before we begin searching, the "world record" for closest color is set to a high number that is easy for the first pixel to beat.
- float worldRecord = 500;
- // XY coordinate of closest color
- int closestX = 0;
- int closestY = 0;
- // Begin loop to walk through every pixel
- for (int x = 0; x < video.width; x ++ ) {
- for (int y = 0; y < video.height; y ++ ) {
- int loc = x + y*video.width;
- // What is current color
- color currentColor = video.pixels[loc];
- float r1 = red(currentColor);
- float g1 = green(currentColor);
- float b1 = blue(currentColor);
- float r2 = red(trackColor);
- float g2 = green(trackColor);
- float b2 = blue(trackColor);
- // Using euclidean distance to compare colors
- float d = dist(r1,g1,b1,r2,g2,b2); // We are using the dist( ) function to compare the current color with the color we are tracking.
- println("x = " + closestX + " y = " + closestY);
- // If current color is more similar to tracked color than
- // closest color, save current location and current difference
- if (d < worldRecord) {
- worldRecord = d;
- closestX = x;
- closestY = y;
- }
- }
- //second camera below
- if (video2.available()) {
- video2.read();
- }
- video2.loadPixels();
- image(video2,0,0);
- // Before we begin searching, the "world record" for closest color is set to a high number that is easy for the first pixel to beat.
- float worldRecord = 500;
- // XY coordinate of closest color
- int closestX2 = 0;
- int closestY2 = 0;
- // Begin loop to walk through every pixel
- for (int x = 0; x < video2.width; x ++ ) {
- for (int y = 0; y < video2.height; y ++ ) {
- int loc = x + y*video2.width;
- // What is current color
- color currentColor2 = video2.pixels[loc];
- float r1 = red(currentColor2);
- float g1 = green(currentColor2);
- float b1 = blue(currentColor2);
- float r2 = red(trackColor);
- float g2 = green(trackColor);
- float b2 = blue(trackColor);
- // Using euclidean distance to compare colors
- float d = dist(r12,g12,b12,r22,g22,b22); // We are using the dist( ) function to compare the current color with the color we are tracking.
- println("x2 = " + closestX2 + " y2 = " + closestY2);
- // If current color is more similar to tracked color than
- // closest color, save current location and current difference
- if (d < worldRecord2) {
- worldRecord2 = d;
- closestX2 = x;
- closestY2 = y;
- }
- }
- }
- // We only consider the color found if its color distance is less than 10.
- // This threshold of 10 is arbitrary and you can adjust this number depending on how accurate you require the tracking to be.
- if (worldRecord < 10) {
- // Draw a circle at the tracked pixel
- fill(trackColor);
- strokeWeight(4.0);
- stroke(0);
- ellipse(closestX2,closestY2,16,16);
- }
- }
- void mousePressed() {
- // Save color where the mouse is clicked in trackColor variable
- int loc = mouseX + mouseY*video.width;
- trackColor = video.pixels[loc];
- }
- unexpected token: void
~Thanks Idan
1