オブジェクトの輪郭を検出するコードです。
//This code has been arranged by Yasushi Noguchi. Last updated on June 21, 2008.
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
//BlobDetection by v3ga
//May 2005
//Processing(Beta) v0.85
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
import processing.video.*;
import blobDetection.*;
Capture cam; //Capture型変数
BlobDetection theBlobDetection; //BlobDetection型変数
PImage img; //物体のトラッキングのために使われる画像
boolean newFrame=false;
// ==================================================
// setup()
// ==================================================
void setup(){
//ウィンドウのサイズ
size(640, 480);
//キャプチャ型変数のcamを宣言
cam = new Capture(this, 320, 240, 30);
// BlobDetection
//imgはキャプチャ映像よりも小さくできる
img = new PImage(80,60);
//トラッキングを開始
theBlobDetection = new BlobDetection(img.width, img.height);
//暗い場所を探すにはfalse, 明るい場所はtrueにする
theBlobDetection.setPosDiscrimination(false);
theBlobDetection.setThreshold(0.5f); //しきい値の設定
}
// ==================================================
// captureEvent()
// ==================================================
void captureEvent(Capture cam){
cam.read(); //カメラから映像を常に取り込む
newFrame = true;
}
// ==================================================
// draw()
// ==================================================
void draw(){
if (newFrame){ //新しいフレームがあったら、
background(255);
newFrame=false;
image(cam,0,0,width,height); //画像をウィンドウに表示
//カメラ画像からトラッキング用の画像に変換しコピー
img.copy(cam, 0, 0, cam.width, cam.height, 0, 0, img.width, img.height);
theBlobDetection.computeBlobs(img.pixels); //オブジェクトを探す
drawEdges(true); //オブジェクトの周辺を描く
}
}
// ==================================================
// drawBlobsAndEdges()
// ==================================================
void drawEdges(boolean drawEdges){
noFill();
Blob b; //オブジェクト用の変数
EdgeVertex eA,eB; //エッジの点
//nはオブジェクトの数
for (int n=0 ; n
