as3でWebカメラ画像の2値化(白黒化)
4月 11th, 2008 admin Posted in Flash, 今日のコード | コメントは受け付けていません。
白黒の顔写真を取り込みたかっただけなんだけど、思ってたより1ピクセルが大きくてギザギザになった。
これをスムーズにする方法があるんだろうか。
このWebカメラは100万画素ぐらいあるはずなんだけど、取り込み用のそういうのはどこかで設定できるんだろうな。
今日はもう遅いのでまた明日調べよう
成果物
しみやそばかすを自動で消してくれるフォトレタッチソフト(落書きっぽいのは後付です)

サンプルはこちら(画面をクリックで白黒画像がとれます)
コード
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Point; import flash.geom.Rectangle; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; public class Main extends flash.display.Sprite { private var camera_width:int = 200; private var camera_height:int = 150; private var video:Video = new Video(camera_width, camera_height); private var tfView:TextField; public function Main():void { tfView = addTextField(220, 0, 200, 150); tfView.appendText("start\n"); var camera:Camera = Camera.getCamera(); if (camera == null) { //error return; } video.attachCamera(camera); addChild(video); stage.addEventListener(MouseEvent.CLICK, onClick); } private function onClick(event:MouseEvent):void { tfView.appendText("click!\n"); var s:BitmapData = new BitmapData(camera_width, camera_height) s.draw(video); var d:BitmapData = new BitmapData(camera_width, camera_height) var r:Rectangle = new Rectangle(0, 0, camera_width, camera_height); d.fillRect(r, 0xFFFFFFFF); d.threshold(s, r, new Point(0, 0), "<=", 90, 0xFF000000, 255, false); var img:Bitmap = new Bitmap(d); addChild(img); img.x = 0; img.y = 160; } private function addTextField(x:Number, y:Number, w:Number, h:Number):TextField { var textField:TextField; textField = new TextField(); addChild(textField); textField.x = x; textField.y = y; textField.width = w; textField.height = h; textField.text =""; textField.selectable=true; textField.border =true; return textField; } } }
まとめ
BitmapDataにthresholdっていうすべてのピクセルを特定の条件で色を変えるっていうずばりそのもののコードがあったのでできた。そしてずばりそのもののコードが載っているサイトがあったのでできた。Webカメラから取り込んでいるというところだけがオリジナル。Webすごい
参考サイト
Flash Player 9/ActionScript3.0/Flex2の勉強日記
BitmapData – ActionScript 3.0 コンポーネントリファレンスガイド
trick7.com blog: BIT-101 : BitmapData Threshold Explorer