Motion detection in specific areas
in
Core Library Questions
•
6 months ago
Im trying to check for motion in specific areas. The code below doesnt work but Im unsure why, any help would be greatly appreciated. Basically Im comparing the live video to a still image. If there is a difference above or below the X/Y used to be compared (via dist function) to a hotspot. The main problem seems to be getting the pixelY variable... (im using code adapted from a sketch on openprocessing)
Any ideas would be appreciated!
import processing.video.*;
Capture video;
int th = 140;
PImage room; //this is the image that is used check the differences with the live image
int node1x = 40;
int node1y = 40;
int radius = 40;
void setup(){
size(640,480);
video = new Capture(this, width, height, 25); //here begins a new sessions of capturing of the images from the webcam
room = loadImage("room.png");
video.start();
//noStroke();
smooth();
}
void draw(){
background(255);
if (video.available()) {
video.read();
}
int myX = 0;
int myY = 0;
loadPixels();
int pixelX = -1, pixelY = -1;
video.loadPixels(); //fill an array of pixels from the current captured image
room.loadPixels(); //fill an array of pixels from the current captured image
for(int i=0; i<video.height*video.width; i++){ //read every element of the pixels array
pixelX = i % width; //get the real pixel X position
if( pixelX != width ) {
pixelY = ( i / width ) +1;
} else {
pixelY = ( i / height );
} //get the real pixel Y position
if(brightness(video.pixels[i]) < brightness(room.pixels[i])-th || brightness(video.pixels[i]) > brightness(room.pixels[i])+th ) {
myX = pixelX;
myY = pixelY;
}
} // END VIDEO SCAN LOOP
updatePixels();
if (dist(myX, myY, node1x, node1y) < radius) {
//VISUAL FEEDBACK
ellipseMode(CENTER);
fill(255, 0, 0);
ellipse(node1x, node1y, 20, 20);
}
println(myX + " " + myY);
// END
}
Any ideas would be appreciated!
import processing.video.*;
Capture video;
int th = 140;
PImage room; //this is the image that is used check the differences with the live image
int node1x = 40;
int node1y = 40;
int radius = 40;
void setup(){
size(640,480);
video = new Capture(this, width, height, 25); //here begins a new sessions of capturing of the images from the webcam
room = loadImage("room.png");
video.start();
//noStroke();
smooth();
}
void draw(){
background(255);
if (video.available()) {
video.read();
}
int myX = 0;
int myY = 0;
loadPixels();
int pixelX = -1, pixelY = -1;
video.loadPixels(); //fill an array of pixels from the current captured image
room.loadPixels(); //fill an array of pixels from the current captured image
for(int i=0; i<video.height*video.width; i++){ //read every element of the pixels array
pixelX = i % width; //get the real pixel X position
if( pixelX != width ) {
pixelY = ( i / width ) +1;
} else {
pixelY = ( i / height );
} //get the real pixel Y position
if(brightness(video.pixels[i]) < brightness(room.pixels[i])-th || brightness(video.pixels[i]) > brightness(room.pixels[i])+th ) {
myX = pixelX;
myY = pixelY;
}
} // END VIDEO SCAN LOOP
updatePixels();
if (dist(myX, myY, node1x, node1y) < radius) {
//VISUAL FEEDBACK
ellipseMode(CENTER);
fill(255, 0, 0);
ellipse(node1x, node1y, 20, 20);
}
println(myX + " " + myY);
// END
}
1