计算机视觉基础知识
经典场景:空间,光源,摄像机。像素单元:不同特征颜色的差异。
对于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);
备注:此案例为视觉追踪之颜色初步识别,颜色用红圈标出。录像过程中刷新间隔大,图像会短时定格。