Created
September 8, 2011 17:39
-
-
Save miminashi/1204047 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 元ネタ: http://kousaku-kousaku.blogspot.com/2008/11/import-processing.html | |
// トラッキングした軌跡を表示するようにした | |
// | |
import processing.video.*; | |
Capture video; | |
PFont font; | |
int w=320; | |
int h=240; | |
//前回画面ピクセル色を保存するための配列を用意 | |
color[] exColor=new color[w*h]; | |
//許容値の変数:50に設定しておく | |
int tolerance=50; | |
int sumX,sumY; //平均値を求めるための合計座標値の変数 | |
int pixelNum; //変化のあったピクセルを数えるための変数 | |
float x,y; //座標値の変数 | |
float filterX,filterY; //フィルタをかけた座標値の変数 | |
boolean movement=false; //動体の有無のフラグ | |
PGraphics canvas; //Canvas for art | |
void setup(){ | |
size(w, h); | |
video = new Capture(this, w, h); | |
font=loadFont("Monaco-10.vlw"); | |
textFont(font); | |
rectMode(CENTER); | |
noStroke(); | |
//canvas = createImage(width, height, ARGB); | |
canvas = createGraphics(width, height, P3D); | |
} | |
void draw() { | |
if(video.available()){ | |
background(0); | |
video.read(); | |
set(0,0,video);//カメラ映像表示 | |
loadPixels();//画面内ピクセルをロードしておく | |
movement=false;//動体のフラグをfalseに戻しておく | |
for(int i=0;i<w*h;i++){ | |
//前回と今回の画面のピクセルの各色の差を求める | |
float difRed=abs(red(exColor[i])-red(video.pixels[i])); | |
float difGreen=abs(green(exColor[i])-green(video.pixels[i])); | |
float difBlue=abs(blue(exColor[i])-blue(video.pixels[i])); | |
//色の差が許容値以上の場合(動体がある場合) | |
if(difRed>tolerance && difGreen>tolerance && difBlue>tolerance){ | |
movement=true;//動体有りのフラグをtrueにしておく | |
pixels[i]=color(0,255,0);//そのピクセルを緑にする | |
sumX+=i%w;//平均値を求めるためにX座標値を加算する | |
sumY+=i/w;//平均値を求めるためにY座標値を加算する | |
pixelNum++;//変化のあったピクセル数を数える | |
} | |
//次回ループのために今回の画面を前回の画面として保存しておく | |
exColor[i]=video.pixels[i]; | |
} | |
//動体があった場合(画面内に変化があった場合) | |
if(movement==true){ | |
updatePixels();//画面内ピクセルをアップデート | |
x=sumX/pixelNum;//X座標平均値を求める | |
y=sumY/pixelNum;//Y座標平均値を求める | |
//各変数を初期化しておく | |
sumX=0; | |
sumY=0; | |
pixelNum=0; | |
} | |
} | |
filterX+=(x-filterX)*0.3; //X座標にフィルタをかける | |
filterY+=(y-filterY)*0.3; //Y座標にフィルタをかける | |
/* | |
fill(255,0,0); | |
rect(filterX,filterY,20,20);//正方形描画 | |
*/ | |
//canvas.updatePixels(); | |
canvas.beginDraw(); | |
canvas.fill(255, 0, 0); | |
canvas.rect(filterX, filterY, 20, 20); | |
canvas.endDraw(); | |
image(canvas, 0, 0); | |
text(tolerance,10,10); //許容値を表示 | |
} | |
void keyPressed(){ | |
if(key=='c'){ | |
video.settings();//カメラセッティング | |
} | |
if(key==CODED){ | |
if(keyCode==LEFT){ | |
tolerance-=1;//許容値を-1する | |
} | |
if(keyCode==RIGHT){ | |
tolerance+=1;//許容値を+1する | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment