# # Background Subtraction # by Golan Levin. # translated to ruby-processing by Martin Prout # Detect the presence of people and objects in the frame using a simple # background-subtraction technique. To initialize the background, press a key. # load_library :video include_package 'processing.video' attr_reader :background_pixels, :number_of_pixels, :video def setup size(640, 480) init_video end def init_video # This the default video input, see the test_capture # example if it creates an error @video = Capture.new(self, width, height) # Start capturing the images from the camera video.start # Create array to store the background image @number_of_pixels = video.width * video.height @background_pixels = Array.new(number_of_pixels, 0) # Make the pixels[] array available for direct manipulation load_pixels end def capture # captureEvent does not work like vanilla processing @video.read background 0 end def draw return unless (video.available == true) capture video.load_pixels # Make the pixels of video available # Difference between the current frame and the stored background # current_sum = 0 number_of_pixels.times do |i| # For each pixel in the video frame... # Fetch the current color in that location, and also the color # of the background in that spot curr_color = video.pixels[i] bkgd_color = background_pixels[i] # Extract the red, green, and blue components of the current pixel's color curr_r = curr_color >> 16 & 0xff curr_g = curr_color >> 8 & 0xff curr_b = curr_color & 0xff # Extract the red, green, and blue of the background pixel's color bkgd_r = bkgd_color >> 16 & 0xff bkgd_g = bkgd_color >> 8 & 0xff bkgd_b = bkgd_color & 0xff # Compute the difference of the red, green, and blue values diff_r = (curr_r - bkgd_r).abs diff_g = (curr_g - bkgd_g).abs diff_b = (curr_b - bkgd_b).abs # Add these differences to the running tally # current_sum += diff_r + diff_g + diff_b # Render the difference image to the screen pixels[i] = (diff_r << 16) | (diff_g << 8) | diff_b end update_pixels # Notify that the pixels[] array has changed # p current_sum # Print out the total amount of movement end def key_pressed video.load_pixels @background_pixels = video.pixels.clone end
Experiments with ruby-processing (processing-2.2.1) and JRubyArt for processing-3.0
Friday, 16 January 2015
A Golan Levin video capture sketch translate to ruby-processing
Labels:
Golan Levin,
ruby-processing,
video capture
Subscribe to:
Post Comments (Atom)
Followers
Blog Archive
-
▼
2015
(51)
-
▼
January
(13)
- Installing netbeans ruby-plugin and jruby_art gem
- JRubyArt vs ruby-processing
- Netbeans, the perfect ide for jruby_art
- Cranky keyboard (unless you are a northern Europea...
- Another sound library example translated to ruby-p...
- Testing the new processing sound library in ruby-p...
- Mirror, a Dan Shiffman video capture sketch
- Experimenting with refinements
- Configuring ruby processing
- A Golan Levin video capture sketch translate to ru...
- A simplified ASCII video capture sketch in ruby pr...
- A Ben Fry video capture sketch in ruby-processing
- Video capture with ruby-processing
-
▼
January
(13)
About Me
- monkstone
- I have developed JRubyArt and propane new versions of ruby-processing for JRuby-9.1.5.0 and processing-3.2.2
No comments:
Post a Comment