/*
Hi everybody. I'm working on a blob detection system to extract silhouette from a background. So i used openCV, and it helped me well until now. Indeed i would like to know how can i convert the output, the blobs (shapes) into a Pimage. I searched in so many ways, but evertimes i have syntax problems.
Below is the sample code from open cv. If you try it, you will see on the bottom right corner, your image filled with blobs and squares. And this is what i want to get. To convert this area into pixels, as a Pimage. Exactly like if you would take a screenshot of this area. (For instance in action script you can convert a movieclip into a bitmap)
I would be really happy that someone help me on that

cheers
ps:
If you dont have OpenCV for p55 installed in your library, you can find it right here :
ubaa.net/shared/processing/opencv/
*/
import hypermedia.video.*;
OpenCV opencv;
int w = 320;
int h = 240;
int threshold = 80;
boolean find=true;
PFont font;
void setup() {
size( w*2+30, h*2+30 );
opencv = new OpenCV( this );
opencv.capture(w,h);
font = loadFont( "AndaleMono.vlw" );
textFont( font );
println( "Drag mouse inside sketch window to change threshold" );
println( "Press space bar to record background image" );
}
void draw() {
background(0);
opencv.read();
//opencv.flip( OpenCV.FLIP_HORIZONTAL );
image( opencv.image(), 10, 10 ); // RGB image
image( opencv.image(OpenCV.GRAY), 20+w, 10 ); // GRAY image
image( opencv.image(OpenCV.MEMORY), 10, 20+h ); // image in memory
opencv.absDiff();
opencv.threshold(threshold);
image( opencv.image(OpenCV.GRAY), 20+w, 20+h ); // absolute difference image
// working with blobs
Blob[] blobs = opencv.blobs( 100, w*h/3, 20, true );
noFill();
pushMatrix();
translate(20+w,20+h);
for( int i=0; i<blobs.length; i++ ) {
Rectangle bounding_rect = blobs[i].rectangle;
float area = blobs[i].area;
float circumference = blobs[i].length;
Point centroid = blobs[i].centroid;
Point[] points = blobs[i].points;
// rectangle
noFill();
stroke( blobs[i].isHole ? 128 : 64 );
rect( bounding_rect.x, bounding_rect.y, bounding_rect.width, bounding_rect.height );
// centroid
stroke(0,0,255);
line( centroid.x-5, centroid.y, centroid.x+5, centroid.y );
line( centroid.x, centroid.y-5, centroid.x, centroid.y+5 );
noStroke();
fill(0,0,255);
text( area,centroid.x+5, centroid.y+5 );
// ---------------------------- HERE IS THE PART ABOUT BLOBS THAT I WANT TO CONVERT
fill(255,0,255,64);
stroke(255,0,255);
if ( points.length>0 ) {
beginShape();
for( int j=0; j<points.length; j++ ) {
vertex( points[j].x, points[j].y );
}
endShape(CLOSE);
}
// --------------------------------------------------------------------------
noStroke();
fill(255,0,255);
text( circumference, centroid.x+5, centroid.y+15 );
}
popMatrix();
}
void keyPressed() {
if ( key==' ' ) opencv.remember();
}
void mouseDragged() {
threshold = int( map(mouseX,0,width,0,255) );
}
public void stop() {
opencv.stop();
super.stop();
}