WebCamera中的边缘检测与碰撞
提取WebCamera视频图像中的边缘并与之交互的示例从早起的雪花飘落开始,这方面的演示已经越来越多。本示例演示掉落的小球与视频图像边缘碰撞并反弹的效果源代码:WebCamera_Collision
[code lang="as3"]
package{
import com.bit101.components.Panel;
import com.coreyoneil.collision.CollisionList;
import com.quasimondo.bitmapdata.CameraBitmap;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.filters.ColorMatrixFilter;
import flash.filters.ConvolutionFilter;
import flash.geom.Point;
import flash.geom.Rectangle;
[SWF(frameRate="31")]
public class WebCamera_Collision extends Sprite{
private var camera:CameraBitmap;
private var edgeCamera:CameraBitmap;
private var edgeBmpd:BitmapData;
private var edgeBmp:Bitmap;
private var w:int = 400;
private var h:int = 300;
private var collisionList:CollisionList;
private var bubbles:Array;
private var gravity:Number = 1;
private var friction:Number = 0.95;
private var panel:Panel;
public function WebCamera_Collision(){
if(stage) init();
else addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(e:Event = null):void{
initStage();
edgeCamera = new CameraBitmap(w,h,15,true);
edgeCamera.addEventListener(Event.RENDER,onRenderCamera);
edgeBmpd = edgeCamera.bitmapData;
edgeBmp = new Bitmap(edgeBmpd);
camera = new CameraBitmap(w,h,15,true);
addChild(new Bitmap(camera.bitmapData));
var refBmp:Bitmap = new Bitmap(edgeBmpd);
refBmp.x = w;
addChild(refBmp);
collisionList = new CollisionList(edgeBmp);
collisionList.excludeColor(0xff000000,255,0,0,0);
bubbles = new Array();
for(var i:int=0;i h){
bubble.y = 0;
bubble.vy = bubble.vx = 0;
bubble.x = Math.random() * w;
}
else if(bubble.x > w){
bubble.x = w - bubble.width/2;
bubble.vx *= -1;
}
else if(bubble.x < 0){
bubble.x = bubble.width/2;
bubble.vx *= -1;
}
}
}
}
}
[/code]
运行效果:
<img src="http://www.everyinch.net/wp-content/uploads/2011/10/WebCamera_Collision.jpg" alt="" title="WebCamera_Collision" width="798" height="298" class="aligncenter size-full wp-image-589" />