OpenGL and processing.video
in
Core Library Questions
•
2 years ago
Hello!
I am trying to run a motion detection script using the default processing video library. The problem is that when I use the OpenGL renderer, the screen turns white and the code does not work anymore.
I really need to use OpenGL, since my program needs a fast renderer.
Does anyone know a way to make the two libraries work together?
Below is my isolated code for motion detection (it works fine without OpenGL):
- import processing.opengl.*;
- import processing.video.*;
- // Variable for capture device
- Capture video;
- // Previous Frame
- PImage prevFrame;
- // How different must a pixel be to be a "motion" pixel
- float threshold = 50;
- // Count motion pixels to detect motion
- HashMap pixeisEmMovimento = new HashMap();
- boolean motionDetected = false;
- int contagemMovimento;
- void setup() {
- size(320,240, OPENGL);
- video = new Capture(this, width, height, 30);
- // Create an empty image the same size as the video
- prevFrame = createImage(video.width,video.height,RGB);
- }
- void draw() {
- // 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);
- pixeisEmMovimento.put(loc, "coiso");
- } else {
- // If not, display white
- pixels[loc] = color(255);
- pixeisEmMovimento.remove(loc);
- }
- }
- }
- if(contagemMovimento < 15) {
- contagemMovimento++;
- } else {
- if(pixeisEmMovimento.size() > 0) {
- motionDetected = true;
- } else {
- motionDetected = false;
- }
- contagemMovimento = 0;
- }
- println(motionDetected);
- }
1