domingo, 8 de julio de 2012

ofxOpenCv


La librería ofxOpenCv es muy compleja. Aquí sólo estoy utilizando una pequeña parte de ella para el blob.
Es secreto aquí es capturar el "fondo", guardar esta imagen y restarla con la imagen que proviene desde la cámara. Esto es lo que se ve en las 3 formas de mostrar la cámara en la parte superior de la pantalla.
Una vez que tengo el blob, utilizo una función que calcula la posición del centro del blob en x, y. Después de esto utilizo esa posición para mostrar el círculo.

ofxCvColorImage        imgCv;
ofxCvGrayscaleImage  imgCvGrayScale;
ofxCvGrayscaleImage  imgCvGrayScaleBckGnd;
ofxCvContourFinder    contour;

imgCvGrayScale = imgCv; // Convierto la imagen de la webcam en escala de grises
imgCvGrayScaleBckGnd = imgCvGrayScale; // Guardo esta imagen para tener el "fondo".
imgCvGrayScale.absDiff(imgCvGrayScaleBckGnd); // resto las imágenes
contour.findContours(imgCvGrayScale, 50, (ofGetWidth()*ofGetWidth())/2, 1, false);
    // en el resultado de la resta busco: area mín del blob, area máx de blob, cant de blobs, sin agujeros.

int nuevoX = contour.blobs[0].centroid.x // este es el x del centro del blob 0
int nuevoY = contour.blobs[0].centroid.y // este es el y del centro del blob 0

apartir de estas coordenadas dibujo lo que quiero:
ofCircle(nuevoX, nuevoY, 20);

No hay comentarios:

Publicar un comentario