Flash ActionScript WEBCAMを使った 赤色の検出
flashでWEBCAMをつかった赤色の検出をやってみた。

赤い折り紙を検出してる様子。赤色を検出して、その重心を割り出す。
ラベリング処理などは行っていないので複数の物体があるときはその複数の物体の重心が表示される。
swf -- flashplayer8以上,webcam必須 ※遅いパソコンだと固まるかも.......試してません。
赤色の検出なんか簡単だろうと素人考えで思っていたのだがそうではなかった.....
折り紙の赤を検出しようと思ったのだけれど普通に色域を指定してやろうとしたら
うまくいかなかったので我流で検出している。
以下その部分のソースコード
こんなので本当にいいのか?一応できているけどもっと簡単にできるはず。
重心の検出部分は
と適当に書いている。
今日はとりあえずここまででおしまい。
ノイズをとるためにmedian filterでも入れるかな。
赤い折り紙を検出してる様子。赤色を検出して、その重心を割り出す。
ラベリング処理などは行っていないので複数の物体があるときはその複数の物体の重心が表示される。
swf -- flashplayer8以上,webcam必須 ※遅いパソコンだと固まるかも.......試してません。
赤色の検出なんか簡単だろうと素人考えで思っていたのだがそうではなかった.....
折り紙の赤を検出しようと思ったのだけれど普通に色域を指定してやろうとしたら
うまくいかなかったので我流で検出している。
以下その部分のソースコード
my_bd.draw(my_video); green_bd.copyChannel(my_bd,my_rect,my_pt,2,1); blue_bd.copyChannel(my_bd,my_rect,my_pt,3,1); blue_bd.draw(green_bd, new Matrix(), new ColorTransform(), 'lighten'); //ブルーとグリーンを合成。明るい方の値が優先される。 my_bd.draw(blue_bd, new Matrix(), new ColorTransform(), 'subtract'); /*元の画像の赤色から他の色を合成した値を引く。 この際、赤-他の色がマイナスの値をとらないようにdifferenceではなく、subtractをつかう。 */ my_bd.applyFilter(my_bd, my_rect, null, noiseReduction); my_bd.threshold(my_bd, my_rect, my_pt, '>', 0xff500000,0xffffffff); my_bd.threshold(my_bd, my_rect, my_pt, '!=', 0xffffffff, 0xff000000); /* ここで赤の値が高い物を白に置き換える。閾値は0xff500000としとく。 (環境によって変化させる必要あり)その後二値化処理(白以外は黒に) */
こんなので本当にいいのか?一応できているけどもっと簡単にできるはず。
重心の検出部分は
var x=0
var y=0
var count=0
//重心を求める際のx y と標本の数を入れるcountの定義
for(i=0 ; i < my_cam.width ; i=i+5){
//5pixel刻みにカメラの画像の横の長さまで
for(e=0 ; e < my_cam.height ; e=e+5){
//5pixel刻みにカメラの画像の縦の高さまで
if(0 != my_bd.getPixel(i,e)){
//もし画素が黒じゃなかったら
x+=i;
//その画素のiをxに足す
y+=e;
//その画素のeをに足す
count++;
//標本した画素の数を記録
}
}
}
/*
上のfor文のあとに
x/count
y/count
を求めることによって重心の座標が求まる。
*/
と適当に書いている。
今日はとりあえずここまででおしまい。
ノイズをとるためにmedian filterでも入れるかな。
トラックバック(2)
このブログ記事を参照しているブログ一覧: Flash ActionScript WEBCAMを使った 赤色の検出
このブログ記事に対するトラックバックURL: http://www.hatayan.org/mt/mt-tb.cgi/421
» Flash画像認識用ムービークリップ(すがメモ/SUGAMEMO)~のトラックバック
Flashの画像認識用ムービークリップを作りました。 カメラの画像をBitmap... 続きを読む

コメントする