/**
* Copyright tepe ( http://wonderfl.net/user/tepe )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/23zp
*/
package{
import flash.text.TextField;
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.media.*;
import flash.filters.*;
[SWF(width="320", height="240", backgroundColor="#000000", frameRate="15")]
public class Main extends MovieClip{
private var video:Video;
private var bmpMC:MovieClip;
private var bmp:Bitmap;//表示画像
private var bmpDat:BitmapData;//前フレーム画像データ
private var bmpDat2:BitmapData;//表示画像用データ(加工用)
private var txt:TextField = new TextField();
private var s:Sprite = new Sprite();
public function Main(){
var camera:Camera = Camera.getCamera();//カメラ使用許可
if ( camera != null ) {
//ビデオ初期化
video = new Video( 320, 240 );//フレームサイズ
video.attachCamera( camera );//使用カメラ
video.visible=false;//非表示
//画像データ
bmpDat = new BitmapData(video.width, video.height, false, 0x000000);
bmpDat2 = new BitmapData(video.width, video.height, false, 0x000000);
bmp = new Bitmap( bmpDat2 );
//ムービークリップ
bmpMC=new MovieClip();
bmpMC.addChild( bmp );// bmp画像を表示
//addChild(video);
addChild(bmpMC);
txt.text = "aaa";
txt.textColor = 0xffffff;
addChild(txt);
addChild(s);
//イベント追加
addEventListener( Event.ENTER_FRAME , capVideo );
}
}
//毎フレーム処理
private function capVideo( e:Event ):void{
var source:BitmapData = new BitmapData(video.width, video.height, false, 0x000000);
source.draw(video);//キャプチャデータ >>> source
var diff:BitmapData = source.clone();//diff <<< sourceクローン
// 画像ブレンド(明暗差を視覚化) キャプチャデータ & 1フレーム前のキャプチャデータ
diff.draw(bmpDat, new Matrix(), new ColorTransform(), BlendMode.DIFFERENCE);
//var a:Array = AA(source);
//txt.text = a.length.toString();
/*s.graphics.clear();
s.graphics.lineStyle(1,0xff0000);
var i:int;
for(i = 0;i<a.length;i++){
s.graphics.drawCircle(a[i].x,a[i].y,4);
}
*/
bmpDat2.draw(BB(source));
// bmpDat2.カラーチャンネル <<< diff.カラーチャンネル 転送
//bmpDat2.copyChannel(diff, diff.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
//bmpDat2.copyChannel(diff, diff.rect, new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.ALPHA);
//bmpDat2.copyChannel(diff, diff.rect, new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
bmpDat = source.clone();//前フレーム画像を更新
}
//特徴点抽出
private function AA(b:BitmapData):Array {
var l:Array = [0, 1, 0,
1, 0, 1,
0, 1, 0];
var d:BitmapData = b.clone();
//2値化
d.applyFilter(b, b.rect, b.rect.topLeft,
new ConvolutionFilter(3, 3, l, 255));
var a:Array = [];
for (var j:int = 1; j < b.height - 1; j++) {
for (var i:int = 1; i < b.width - 1; i++) {
if (b.getPixel(i, j) != 0) {
var c:int = d.getPixel(i, j) & 255;
if (c == 1 || c == 3 || c == 4) {
a.push({c:c, x:i, y:j});
}
}
}
}
return a;
}
private function BB(b:BitmapData):BitmapData{
var l:Array = [0, 1, 0,
1, 0, 1,
0, 1, 0];
var d:BitmapData = b.clone();
d.applyFilter(b, b.rect, b.rect.topLeft,
new ConvolutionFilter(3, 3, l, 5));
return d;
}
}
}