We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hello guys, I am having an issue with the code. I am trying to put 2 videos playing at the same time, one colour, one black and white, at the same time have motion detection (it's a projection, more issues to come, because it multiplies the screen when webcam is faced to projection), however, I tried to make a mask, running black and white video as main one, and colour under it, so once motion is detected, the part that its captured lets the colour video come up (not entire screen, but just parts where motion is detected), and it seems not to work :D I am getting desperate, because my dead line is in a week!!!! Please Please Please! here is the code:
//motion detection and video capture
import processing.video.*;
Capture video;
boolean cheatScreen;
PImage prevFrame;
Movie myMovie;
Movie myMovie2;
float threshold = 50;
void setup() {
size(1280, 720);
myMovie = new Movie(this, "short.mp4");
myMovie.loop();
myMovie2 = new Movie(this, "bnw.mp4");
myMovie2.loop();
video = new Capture(this, width, height, 30);
prevFrame = createImage(video.width, video.height, RGB);
video.read();
}
void draw() {
image(myMovie, 0, 0);
image(myMovie2, 0, 0);
// Capture video
if (video.available()) {
// Save previous frame for motion detection!!
prevFrame.copy(video, 0, 0, video.width, video.height, 0, 0, video.width, video.height); // Before we read the new frame, we always save the previous frame for comparison!
prevFrame.updatePixels();
video.read();
loadPixels();
video.loadPixels();
prevFrame.loadPixels();
// Begin loop to walk through every pixel
for (int x = 0; x < video.width; x ++ ) {
for (int y = 0; y < video.height; y ++ ) {
int loc = x + y*video.width; // Step 1, what is the 1D pixel location
color current = video.pixels[loc]; // Step 2, what is the current color
color previous = prevFrame.pixels[loc]; // Step 3, what is the previous color
// Step 4, compare colors (previous vs. current)
float r1 = red(current);
float g1 = green(current);
float b1 = blue(current);
float r2 = red(previous);
float g2 = green(previous);
float b2 = blue(previous);
float diff = dist(r1, g1, b1, r2, g2, b2);
// Step 5, How different are the colors?
// If the color at that pixel has changed, then there is motion at that pixel.
if (diff > threshold) {
// If motion, display black
//pixels[loc] = color(0);
myMovie.loop();
} else {
// If not, display white
//pixels[loc] = color(255);
myMovie2.loop();
}
}
}
}
}