Hello, I am very new on processing and try to make a capture movie with recorded video, but unfortunately, I can not fix it for many days and nights. I am very tired of all this. I want to quit but must to do for a college, and maybe in the future for installation. Can any of you help me please, and show me where is the problem(s)? Thank you (sorry for my English languages, are not my native languages)
import processing.video.*;
int numPixels;
// Number of columns and rows in the system
int[] previousFrame;
// Variable for capture device
Movie movie;
Capture video;
void setup() {
size(640, 480);
movie = new Movie(this, "VROXI.mp4");
movie.loop();
}
// Step 4. Read new frames from the movie.
void movieEvent(Movie movie) {
movie.read();
}
// Step 5. Display movie.
void draw() {
image(movie, 0, 0);
video = new Capture(this, width, height);
// Start capturing the images from the camera
video.start();
video.read(); // Read the new frame from the camera
video.loadPixels(); // Make its pixels[] array available
numPixels = video.width * video.height;
// Create an array to store the previously captured frame
previousFrame = new int[numPixels];
loadPixels();
}
// When using video to manipulate the screen, use video.available() and
// video.read() inside the draw() method so that it's safe to draw to the screen
{int movementSum = 0; // Amount of movement in the frame
for (int i = 0; i < numPixels; i++) { // For each pixel in the video frame...
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
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);
// 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;
}
// To prevent flicker from frames that are all black (no movement),
// only update the screen if the image has changed.
if (movementSum > 0) {
updatePixels();
println(movementSum); // Print the total amount of movement to the console
}
}