快速业务通道

Flash摄像头游戏课件的设计与实现

作者 凌众技术 来源 网页制作 浏览 发布时间 2012-03-08
前”,this.getNextHighest Depth());
  //将摄像头获取的图像显示在影片剪辑内
  bitmap_mc.attachBitmap(now,1);
  3)检测图像的动态显示
  要实现检测图像的动态显示,必须不断的更新当前图像now和历史图像before,并进行混合处理。可以把检测图像的功能写成方法snapshot(),每隔100毫秒调用一次。
  伪代码如下:
  function snapshot() {
  //获取当前图像
  //获取检测图像
  //将检测图像绘制到
  //将检测图像中RGB超过阀值0xFF111111的部分替换成绿色
  //显示检测图像
  //本次检测完成之后,当前图像便成为了历史图像。为下一次检测做好准备。
  preBitmap = nowBitmap.clone();
   }
  在该方法中,关键在于每次检测完成之后当前图像和历史图像的更新。
  6.检测特定区域内的运动状态
  经过上面几步操作,已经得到了检测图像。检测图像是对整幅图像的运动情况的反映。在游戏中,经常需要检测的是某一特定区域的运动状态。
  1)检测某点的运动状态
  因为已经到了检测图像,所以在检测某一点运动状态时,只需要判断检测图像上该点的RGB值是否大于阀值。
  伪代码如下:
  pix = myBitmap.getPixel(x, y);

if (pix大于阀值) {
   //该点发生了运动
   }
  2)检测某区域的运动状态
  由于灯光因素、摄像头图像噪点等干扰因素的存在,每次只检测一个点容易造成检测结果的不稳定。因此,大多采用区域检测的方式。即在检测某点运动状态时,检测的不仅仅是这个点,而是以该点开始的n*n个像素的区域(n的取值根据实际情况确定,在检测点数量较多时,n的值不宜取太大。)。如果检测区域内的像素点变化数量超过一定阀值,如60%,则认为该区域发生了运动。
  需要注意的一点是,由于看到的图像是经过水平翻转的,但原有的图像内部坐标系并没有发生变化,因此,检测时的取点位置也要水平翻转。
  //以(rectx,recty)为顶点的rectw*recth的矩形区域的运动情况
  function ismove(a, rectx, recty, rectw, recth) {
   var i, j;
   var sum = 0;
   var pix;
   for (i=1; i<=rectw; i++) {
   for (j=1; j<=recth; j++) {
  //图像水平翻转后取点位置相对变化
   pix = a.getPixel(160-i-rectx, j+recty);
   if (pix>132361) {
   sum++;
   }
   }
   }
   //trace("sum="+sum);
   if (sum>(recth*rectw/2)) {
   r

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号