You are on page 1of 3

Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A.

Madrigal
EXTRACCIN DE CARACTERISTICAS DE OBJETOS CONEXOS CON LA LIBRERA CVBLOBSLIB
1. Bajar la librera cvBlobsLib y su documentacin.
http://opencv.willowgarage.com/wiki/cvBlobsLib
2. Construya el .lib de la librera compilando en su versin de Visual Studio C++.
- Tenga en cuenta que debe incluir los directorios de archivos de inclusin,
como se hizo con OpenCV.
- Escoger la compatibilidad en No es compatible con Common Language
Runtime.
3. En el proyecto que desea incluir la librera cvblobslib, incluya los directorios y el
.lib de cvblobslib.
4. Realice la inclusin de #include "BlobResult.h"

Ejercicio #1. Hallar el rea de un Objeto
Este ejercicio obtiene el rea del objeto ms a la izquierda en la imagen 1.jpg y lo
resalta de color azul.
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include "BlobResult.h"

using namespace cv;

1. CBlobResult blobs;

int main(){


2. Mat imagen, imagenGris, imagenUmbral;

3. imagen= imread("C:\\1.jpg");

4. imagenUmbral.create(imagen.rows, imagen.cols, CV_8UC1);

5. cvtColor(imagen, imagenGris, CV_BGR2GRAY);

6. for(int j=0; j<imagenGris.rows; j++){
uchar* data= imagenGris.ptr<uchar>(j);
uchar* data1= imagenUmbral.ptr<uchar>(j);
for(int i=0; i<imagenGris.cols; i++){
if(data[i]>=100 && data[i]<=200){
data1[i]=0;
}
else{
data1[i]=255;
}
}
}

7. IplImage* IplimagenUmbral = &imagenUmbral.operator IplImage();
8. IplImage *Iplimagen= &imagen.operator IplImage();

9. blobs = CBlobResult( IplimagenUmbral,NULL,255);

Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A. Madrigal
10. CBlob *currentBlob;

11. blobs.Filter( blobs, B_INCLUDE, CBlobGetArea(), B_GREATER, 3000);

12. int numBlobs=blobs.GetNumBlobs();

13. if(numBlobs!=0){
for (int i = 0; i < blobs.GetNumBlobs(); i++ )
{
currentBlob = blobs.GetBlob(i);
currentBlob->FillBlob(Iplimagen, CV_RGB( 0, 0, 255));
CBlobGetArea getArea;
int Area=getArea(*currentBlob);
printf("rea: %d", Area);
}
}

namedWindow("Original",1);

namedWindow("Umbral",1);

imshow("Original",imagen);

imshow("Umbral",imagenUmbral);

waitKey(10000);

getchar();

return 0;

}

En 1 se crea un constructor de la clase CBlobsResult llamado blobs, el cual
permite calcular los blobs (objetos conexos en una imagen) y algunas
propiedades de ellos.
De 2 a 6 se carga una imagen y se le aplica el operador intervalo umbral binario
para tratar de segmentar el objeto buscado. La imagen resultado es
imagenUmbral
En 7 y 8, debido a que la librera cvbolbslib fue desarrollada usando la
versin 1 de OpenCV, est todava utiliza en sus funciones el viejo IplImage,
por eso en estas lneas se crea un apuntador IplImage a las imgenes tipo
MAT.
En 9 mediante la funcin CBlobsResult se hallan todos los blobs en la imagen
IplimagenUmbral(imagenUmbral)con intensidad de color diferente al blanco
y se guarda en blobs. El argumento 2 igual a NULL se refiere a que la imagen
no tiene ROI.
En 10 se crea un apuntador a la clase CBlob llamado currentBlob.
Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A. Madrigal
En 11 mediante el mtodo filter de la clase CBlobsResult se filtran los blobs,
dejando aquellos que tengan un rea mayor a 3000 pxeles.
En 12 se obtienen el nmero de blobs con el mtodo GetNumBlobs().
En 13 se recorren todos los blobs que cumplieron con las condiciones
anteriores y se rellena de color azul sobre la imagen original, adems se halla su
rea, visualizndola en consola.


Tarea
1. Contar el nmero de granos usando la librera cvblobslib.

2. Calcular las distancias desde el centro de los robots a la pelota y el ngulo
de orientacin de cada robot.

3. Aplicar un algoritmo para obtener el resultado mostrado.

You might also like