I worked with O Cubo in creating an interactive floor for GNR (the portuguese national guard) as part of the celebrations for the centenary of the portuguese republic.
It allowed the visitors to look through several historical archive images in a fun and engaging way.
The exhibition ran for 3 weeks during April at GNR’s headquarters in Largo do Carmo, Lisbon.
It was created in C++ using OpenFrameworks with OpenCV and OpenGL
O Cubo: www.ocubo.com
some more pictures on flickr http://www.flickr.com/photos/ruimadeira-…-056735398/
Great job, I’d love to see the code
thanks, glad you like it.
@Tim S, sorry i don’t plan on releasing the code. But i’ll be glad to answer any questions you might have.
How many projectors and cams did you use for this?
we used 3 cameras and 3 projectors. The camera images are stitched together using a quad multiplexer and fed into the computer as a single input. They are then separated in software using OpenCV
Don’t know exactly the models but they where some regular CCTV cameras and quad multiplexer from a surveillance store.
To separate the images in OpenCV i set the ROI to match each image’s area in the main image and copied it to a separate image.
The multiplexer gives an image which is a mosaic of 4 images. The camera images are inserted int the multiplexer in the top left, top right and bottom left quadrants. The bottom right has no signal so its a just a black square which is ignored.
//top left image
cvSetImageROI(grayCamImg->getCvImage(), cvRect(0, 0, 320, 240));
//top right image
cvSetImageROI(grayCamImg->getCvImage(), cvRect(320, 0, 320, 240));
//bottom left image
cvSetImageROI(grayCamImg->getCvImage(), cvRect(0, 240, 320, 240));
looks very great. i would like to ask you if you can give any information about the bending texture? how is this done?
The top image is made by a grid of quads, textured to make up the image when in their original position (like a puzzle).
the animation is all physics based. Each quad is made of 4 particles connected by 4 springs.
Each blob detected by the contour finder applies a repulsion force to these particles. They also have a small force applied towards their original position to make the grid close when no one is in there.
I used ofxRuiPhysics3d (the animation is in 3d, and the repulsion force is applied under the particles just to give them a little perspective), but its all very simple. It could easily have been made with MASPhysics or Box2d or other physics lib.
How did you solve the problem of edge blending (hardware edge blending?)?
I used a grid based image warper (that should be released as an addon soon enough, as soon as i clean the code). We didn’t do any blending, just adjusted the edges of the videos so they stitch together.
The image warper is made using FBO’s and has some nice features
The code is still pretty messy and some stuff is not finished or hasn’t been tested but i can send it if anyone’s interested, just PM me.
Did you use infrared spectrum, IR filters, IR Cams. How did you deal with a feedback from the interactive floor coming into camera?
yes, we used IR lights and cameras.
To prevent feedback we used a visible light filter (made with black photograph film) which blocks light form the projector, so only IR light is captured by the camera.
Great installation. It runs very smooth. Let me ask two questions:
- What was the approx. size of the projected surface?
- Did you use any sort of contour tracker? (if so, which one?) or just periodically chek contours positions?
I forgot to ask, what kind of IR lights did you use?
just regular IR lights bought from a surveillance shop. I didn’t buy them so don’t know the details, just know they where rather strong and had a wide angle.