AbbyProgrammer 
		
		YaBB Newbies
		 
		Offline 
		
		
		Posts: 2
		
		
		
		
 
	 
	
		
			
				Re: Sound and Sensor Help  
				Reply #1 -  Nov 26th , 2008, 4:54am 
			 
			
				
	  
			 
		
		
			int numPixels; int[] backgroundPixels; Capture video; BlobDetection theBlobDetection; PImage img, binaryImg; int threshold = 40; int minBlobSize = 2000; void cameraSetup() {   video = new Capture(this, width, height, 24);   numPixels = video.width * video.height;   backgroundPixels = new int[numPixels];   loadPixels();   binaryImg = new PImage(width, height);   img = new PImage(80,60);    theBlobDetection = new BlobDetection(img.width, img.height);   theBlobDetection.setPosDiscrimination(true);   theBlobDetection.setThreshold(0.5f);    theBlobDetection.activeCustomFilter(this);  } void blobDetection() {   if (video.available()) {     video.read();      video.loadPixels();           int presenceSum = 0;     for (int i = 0; i < numPixels; i++) {               color currColor = video.pixels[i];       color bkgdColor = backgroundPixels[i];             int currR = (currColor >> 16) & 0xFF;       int currG = (currColor >> 8) & 0xFF;       int currB = currColor & 0xFF;             int bkgdR = (bkgdColor >> 16) & 0xFF;       int bkgdG = (bkgdColor >> 8) & 0xFF;       int bkgdB = bkgdColor & 0xFF;              int diffR = abs(currR - bkgdR);       int diffG = abs(currG - bkgdG);       int diffB = abs(currB - bkgdB);       threshold = int(map(mouseY, 0, height, 0, 255));              if (diffR > threshold || diffG > threshold || diffB > threshold )       {         diffR = 255;         diffG = 255;         diffB = 255;       }       else       {         diffR = 0;         diffG = 0;         diffB = 0;       }             presenceSum += diffR + diffG + diffB;              pixels[i] = 0xFF000000 | (diffR << 16) | (diffG << 8) | diffB;       binaryImg.pixels[i] = pixels[i];         if (i%width>width/2) {         if  (diffR == 255) {           diffR=0;           diffG=0;           diffB=0;         }         else {           diffR=255;           diffG=255;           diffB=255;         }       }       pixels[i] = 0xFF000000 | (diffR << 16) | (diffG << 8) | diffB;     }     updatePixels();           filter(ERODE);     filter(ERODE);     filter(DILATE);     println(presenceSum);      img.copy(binaryImg, 0, 0, width, height,      0, 0, img.width, img.height);        theBlobDetection.computeBlobs(img.pixels);     drawBlobsAndEdges(true,false);   } } void keyPressed() {   video.loadPixels();   arraycopy(video.pixels, backgroundPixels); } void drawBlobsAndEdges(boolean drawBlobs, boolean drawEdges) {   strokeWeight(1);   stroke(255,0,0);   noFill();   Blob b;   EdgeVertex eA,eB;   for (int n=0 ; n<theBlobDetection.getBlobNb(); n++)   {     b=theBlobDetection.getBlob(n);                 if (b.w*width * b.h*height > minBlobSize) {      if (b!=null)     {              if (drawEdges)       {         strokeWeight(3);         stroke(0,255,0);         for (int m=0;m<b.getEdgeNb();m++)         {           eA = b.getEdgeVertexA(m);           eB = b.getEdgeVertexB(m);           if (eA !=null && eB !=null)             line(             eA.x*width, eA.y*height,              eB.x*width, eB.y*height               );         }       }              if (drawBlobs)       {         strokeWeight(1);         stroke(255,0,0);         rect(          b.xMin*width,b.yMin*height,         b.w*width,b.h*height           );                  println(n);         println("center " + b.x*width + " " + b.y*height);         println("mass " + b.w*width * b.h*height);       }     }                }   } } boolean newBlobDetectedEvent (Blob b) {   if (b.w*width * b.h*height > minBlobSize)     return true;   else     return false;  } void fastblur(PImage img,int radius) {   if (radius<1){     return;   }   int w=img.width;   int h=img.height;   int wm=w-1;   int hm=h-1;   int wh=w*h;   int div=radius+radius+1;   int r[]=new int[wh];   int g[]=new int[wh];   int b[]=new int[wh];   int rsum,gsum,bsum,x,y,i,p,p1,p2,yp,yi,yw;   int vmin[] = new int[max(w,h)];   int vmax[] = new int[max(w,h)];   int[] pix=img.pixels;   int dv[]=new int[256*div];   for (i=0;i<256*div;i++){     dv[i]=(i/div);   }   yw=yi=0;   for (y=0;y<h;y++){     rsum=gsum=bsum=0;     for(i=-radius;i<=radius;i++){       p=pix[yi+min(wm,max(i,0))];       rsum+=(p & 0xff0000)>>16;       gsum+=(p & 0x00ff00)>>8;       bsum+= p & 0x0000ff;     }     for (x=0;x<w;x++){       r[yi]=dv[rsum];       g[yi]=dv[gsum];       b[yi]=dv[bsum];       if(y==0){         vmin[x]=min(x+radius+1,wm);         vmax[x]=max(x-radius,0);       }       p1=pix[yw+vmin[x]];       p2=pix[yw+vmax[x]];       rsum+=((p1 & 0xff0000)-(p2 & 0xff0000))>>16;       gsum+=((p1 & 0x00ff00)-(p2 & 0x00ff00))>>8;       bsum+= (p1 & 0x0000ff)-(p2 & 0x0000ff);       yi++;     }     yw+=w;   }   for (x=0;x<w;x++){     rsum=gsum=bsum=0;     yp=-radius*w;     for(i=-radius;i<=radius;i++){       yi=max(0,yp)+x;       rsum+=r[yi];       gsum+=g[yi];       bsum+=b[yi];       yp+=w;     }     yi=x;     for (y=0;y<h;y++){       pix[yi]=0xff000000 | (dv[rsum]<<16) | (dv[gsum]<<8) | dv[bsum];       if(x==0){         vmin[y]=min(y+radius+1,hm)*w;         vmax[y]=max(y-radius,0)*w;       }       p1=x+vmin[y];       p2=x+vmax[y];       rsum+=r[p1]-r[p2];       gsum+=g[p1]-g[p2];       bsum+=b[p1]-b[p2];       yi+=w;     }   } }