Processing楽しい。

簡単な背景差分法で人影を作ってみた。

マウスクリックすると変数bgにwebcamの画像をコピーする。

あとはdraw()ループの中でbgとwebcamのピクセルを1つずつ比較して、しきい値以上の差があれば黒くする。

Built with Processingの168ページと186ページのあたりを見たらすぐ出来た。

Background Subtraction

Source Code (Processing 0124 Beta)



 

/***

CaptureandComparepixels

RGBを比較して影化



Compiler:Processing0124Beta

Date:2007/4/27

Author:ShoHashimoto

WebSite:http://shokai.org

***/

importprocessing.video.*;

colorthreshold=color(5,5,5);//RGBでしきい値を指定

Capturecamera;

PImagebg;

voidsetup(){

size(640,480);

camera=newCapture(this,width,height,12);

bg=newPImage(width,height);

}

voiddraw(){

loadPixels();//pixelsに現在の表示を読み込み

for(inti=0;i
intc=camera.pixels[i];

intb=bg.pixels[i];

if(abs(red(c)-red(b))>red(threshold)&&

abs(green(c)-green(b))>green(threshold)&&

abs(blue(c)-blue(b))>blue(threshold)){//ピクセルに色の差がある時

pixels[i]=color(0,0,0);//黒

}

else{

pixels[i]=color(255,255,255);//白

}

}

updatePixels();//pixelsを表示に反映させる

}

voidcaptureEvent(Capturecamera){

camera.read();

}

voidmousePressed(){

println(“SaveBG”);

bg.copy(camera,0,0,width,height,0,0,width,height);//背景を保存

}