我想跟踪2种颜色,但只记录这两种颜色的移动并隐藏视频输入

时间:2014-12-24 11:43:05

标签: colors processing webcam tracking

上下文:我将分析父母在袋鼠妈妈护理期间的呼吸运动,我希望不记录它们而尊重他们的隐私,而只是贴在胸部和腹部的贴纸运动。

到目前为止,我可以通过以下代码根据网络摄像头输入跟踪2种颜色。但是,我想仅记录跟踪的颜色而不是网络摄像头,以保护父母的隐私。

有人知道如何添加背景颜色,同时还能跟踪颜色吗?

import processing.video.*;


Capture video; 
final int TOLERANCE = 20;

float XRc = 0;// XY coordinate of the center of the first target
float YRc = 0;
float XRh = 0;// XY coordinate of the center of the second target
float YRh = 0;

int ii=0; //Mouse click counter

color trackColor; //The first color is the center of the robot 
color trackColor2; //The second color is the head of the robot

void setup() {

size(640,480);
video = new Capture(this,640,480);
video.start();

trackColor = color(255,0,0);
trackColor2 = color(255,0,0);

smooth();
}

void draw() {
background(0);
if (video.available()) {
    video.read();
}

video.loadPixels();
image(video,0,0);

  float r2 = red(trackColor);
  float g2 = green(trackColor);
  float b2 = blue(trackColor);

  float r3 = red(trackColor2);
  float g3 = green(trackColor2);
  float b3 = blue(trackColor2);




  int somme_x = 0, somme_y = 0; 
  int compteur = 0;

  int somme_x2 = 0, somme_y2 = 0; 
  int compteur2 = 0;



  for(int x = 0; x < video.width; x++) {
    for(int y = 0; y < video.height; y++) {

      int currentLoc = x + y*video.width;
      color currentColor = video.pixels[currentLoc];

      float r1 = red(currentColor);
      float g1 = green(currentColor);
      float b1 = blue(currentColor);


      if(dist(r1,g1,b1,r2,g2,b2) < TOLERANCE) {
         somme_x += x;
         somme_y += y;
        compteur++;
      }

      else if(compteur > 0) { 
        XRc = somme_x / compteur;
        YRc = somme_y / compteur;
      }


      if(dist(r1,g1,b1,r3,g3,b3) < TOLERANCE) {
         somme_x2 += x;
         somme_y2 += y;
        compteur2++;
      }

      else if(compteur2 > 0) { 
        XRh = somme_x2 / compteur2;
        YRh = somme_y2 / compteur2;
      }



  }
  }




  if(XRc != 0 || YRc != 0) { // Draw a circle at the first target
    fill(trackColor);
    strokeWeight(0.05);
    stroke(0);
    ellipse(XRc,YRc,20,20);
  }


  if(XRh != 0 || YRh != 0) {// Draw a circle at the second target
    fill(trackColor2);
    strokeWeight(0.05);
    stroke(0);
    ellipse(XRh,YRh,20,20);
  }

}
void mousePressed() {
  if (mousePressed && (mouseButton == RIGHT)) { // Save color where the mouse is clicked in trackColor variable  
  if(ii==0){  

    if (mouseY>480){mouseY=0;mouseX=0;}
  int loc = mouseX + mouseY*video.width;

  trackColor = video.pixels[loc];
ii=1;  
}
  else if(ii==1){  
    if (mouseY>480){mouseY=0;mouseX=0;}
  int loc2 = mouseX + mouseY*video.width;
  trackColor2 = video.pixels[loc2];
ii=2;  

}


  }
  }

1 个答案:

答案 0 :(得分:0)

尝试在绘制第一个圆圈之前添加background(0);。它应该覆盖视频,你可以在它上面绘制圆圈。

此致 何