作者 主题: 用摄像头扑捉移动并且使小方块移动  (阅读 3409 次)

klmylmtxz

  • Newbie
  • *
  • 帖子: 25
用摄像头扑捉移动并且使小方块移动
« 于: 六月 19, 2012, 04:59:34 下午 »
如题
代码如下
程序代码
import codeanticode.gsvideo.*;
int threshold;
float posX;
float posY;
int setW=400,setH=400,videoW=160,videoH=120;
GSCapture video;
int[] previousFrame;
void setup(){
  size(400,400,P3D);
  frameRate(30);
  video=new GSCapture(this,width,height);
  video.start();

 
}
void draw(){
  if (video.available()) {
      video.read(); // Read the new frame from the camera
      video.loadPixels(); // Make its pixels[] array available
      int movementSum = 0;
      loadPixels();
      int i = 0,II,xz=0,yz=0,Iz=0;
      for (int y = 0; y < video.height; y++) {
        for (int x = 0; x < video.width; x++) {
          color currColor = video.pixels[i];
          color prevColor = previousFrame[i];
          // Extract the red, green, and blue components from current pixel
          int currR = (currColor >> 16) & 0xFF; // Like red(), but faster (see p. 673)
          int currG = (currColor >> 8) & 0xFF;
          int currB = currColor & 0xFF;
          // Extract red, green, and blue components from previous pixel
          int prevR = (prevColor >> 16) & 0xFF;
          int prevG = (prevColor >> 8) & 0xFF;
          int prevB = prevColor & 0xFF;
          // Compute the difference of the red, green, and blue values
          int diffR = abs(currR - prevR);
          int diffG = abs(currG - prevG);
          int diffB = abs(currB - prevB);

          // Add these differences to the running tally
          movementSum += diffR + diffG + diffB;
          // Render the difference image to the screen
          pixels[i] = color(diffR, diffG, diffB);
          if (diffR+diffG+diffB>threshold)
          {
            II=1;
          }
          else
          {
            II=0;
          }
          xz += x*II;
          yz += y*II;
          Iz += II;

          // The following line is much faster, but more confusing to read
          //pixels[i] = 0xff000000 | (diffR << 16) | (diffG << 8) | diffB;
          // Save the current color into the 'previous' buffer
          previousFrame[i] = currColor;
          i++;
        }
      }
      if (movementSum >0 && Iz> 0) {
        posX=(video.width-xz/Iz)*setW/videoW;
        posY=yz/Iz*setH/videoH;
      }

}
  background(0);
rectMode(CENTER);
fill(255,0,0);
rect(posX,posY,20,20);
}
« 最后编辑时间: 六月 19, 2012, 08:30:04 下午 作者 vinjn »

Contra

  • SuperManager
  • Sr. Member
  • *****
  • 帖子: 347
  • AC, game dev, new media art&tech.
    • i'm Contra
Re: 用摄像头扑捉移动并且使小方块移动
« 回复 #1 于: 六月 19, 2012, 05:19:06 下午 »
这是经验分享?

klmylmtxz

  • Newbie
  • *
  • 帖子: 25
Re: 用摄像头扑捉移动并且使小方块移动
« 回复 #2 于: 七月 13, 2012, 08:59:44 下午 »
不是 我不清楚错哪了 该怎么改啊

vinjn

  • SuperManager
  • Hero Member
  • *****
  • 帖子: 586
Re: 用摄像头扑捉移动并且使小方块移动
« 回复 #3 于: 七月 13, 2012, 09:46:08 下午 »
1.别人的代码永远是别人的
如果你只复制黏贴,不去理解他
那么永远成不了你的代码

2.请阅读提问的智慧,尤其是《怎样提问》
http://www.hudo.it/index.php/topic,115.0.html

klmylmtxz

  • Newbie
  • *
  • 帖子: 25
Re: 用摄像头扑捉移动并且使小方块移动
« 回复 #4 于: 七月 13, 2012, 09:50:08 下午 »
我们老师只给我这个,看了好一阵=。=!

Tags: