You are on page 1of 9

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.

a. En el administrador de propiedades del proyecto agregamos una nueva


hoja de propiedades con nombre DEBUG
Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A. Madrigal

b. Dando click derecho sobre DEBUG ingresamos a la ventana de


propiedades, donde se adicionan las rutas de los archivos de inclusin y
de libreras. En este caso se hacen 2 adiciones, una hasta la ruta
C:\OpenCV3.1\opencv\build\include y la otra hasta
C:\OpenCV3.1\opencv\build\include\opencv. Lo anterior es para
adicionar las libreras de la versin 1.0 de OpenCV sobre las cuales
trabaja cvblobslib.
Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A. Madrigal

c. Compilar el proyecto. (si aparece el siguiente error, escoger Utilizar


Juego de caracteres Unicode en Propiedades de configuracin)
Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A. Madrigal

d. Escoger la compatibilidad en No es compatible con Common Language


Runtime.
3. Al compilar, van a salir los siguientes errores.

Dar doble click sobre alguno de ellos y cambiar en la inclusin de las libreras #include
cxtypes.h por #include cxcore.h
Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A. Madrigal

4. En la carpeta de cvblobslib->debug debe aparecer la librera cvblobslib.lib

5. Abra el proyecto donde desea incluir la librera cvblobslib, incluya los


directorios de inclusin de OpenCV1.0 y de cvblobslib, adems incluya los
directorios de libreras de cvblobslib.
Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A. Madrigal

6. Adicionamos la librera cvblobslib.lib

7. Realice la inclusin de #include "BlobResult.h" al main y copie el ejemplo #1.

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 <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/utility.hpp>
Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A. Madrigal

#include <opencv\cv.h>
#include <opencv\highgui.h>

#include "BlobResult.h"

using namespace cv; // The new C++ interface API is inside this namespace.
Import it.
using namespace std;

1. CBlobResult blobs;

int main(){

2. Mat imagen, imagenGris, imagenUmbral;

3. imagen= imread("1.jpg");

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

5. cvtColor(imagen, imagenGris, COLOR_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;


8. IplImage Iplimagen = imagen;

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

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);
Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A. Madrigal

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 cvblobslib fue desarrollada usando la versin 1 de


OpenCV, est todava utiliza en sus funciones del viejo IplImage, por eso en estas
lneas se crea un estructura IplImage que apunta 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.

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.


Inteligencia Artificial, Instituto Tecnolgico Metropolitano Carlos A. Madrigal

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