计算机视觉基础知识

        经典场景:空间,光源,摄像机。像素单元:不同特征颜色的差异。

        对于RGB类的像素,通过距离函数比较颜色的相似程度float diff = dist(r1,g1,b1,r2,g2,b2)。分析颜色距离,才能跟踪或查找颜色。


input:

import processing.video.*;

Capture video;  //摄像机引擎

void setup(){
  size(600,445);
  video = new Capture(this);
  video.start();  
}

void captureEvent(Capture video){  //为保证摄像机实时获取图像,要创建一个捕获时间函数以及一个回调和时间回调
  video.read();
}

void draw(){
  if (video.available() == true){
    image(video,0,0); 
    
    float worldRecord = 500;  //追踪世界记录或阈值

    //XY coordinate of closest color
    int closestX = 0;
    int closestY = 0;
    
    video.loadPixels();
    color trackColor = color(29,64,114);  //追踪颜色1
    //color trackColor = color(109,98,88);  //追踪颜色2
    
    //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;
        //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);
      
        //compare color通过距离函数比较颜色的相似程度
        float d = dist(r1,g1,b1,r2,g2,b2);
      
        //similar to tracked color如相似则追踪位置      
        if (d < worldRecord){
          worldRecord = d;
          closestX = x;
          closestY = y;
        }
        loc++;
      }
      //draw the pixel
      stroke(255,0,0);
      noFill();
      ellipse(closestX,closestY,16,16);
      
    }
  }
}

output(追踪颜色1): color trackColor = color(29,64,114);

 output(追踪颜色2): color trackColor = color(109,98,88);

 备注:此案例为视觉追踪之颜色初步识别,颜色用红圈标出。录像过程中刷新间隔大,图像会短时定格。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐