45
Dr. S. Rolando Cruz Ramírez

Instrucciones OpenCV y C

Embed Size (px)

Citation preview

Page 1: Instrucciones OpenCV y C

Dr. S. Rolando Cruz Ramírez

Page 2: Instrucciones OpenCV y C

Agregar librerías

La primer librería "stdafx.h« la da por default el programa y no debemos borrarla.

Las siguientes librerías <cv.h>, <cxcore.h>, <highgui.h> son para incluir openCV en nuestro programa deben de introducirse las 3.

Page 3: Instrucciones OpenCV y C

Validar librerías Para validarlas se da clic derecho sobre el nombre del proyecto y posteriormente en propiedades

Page 4: Instrucciones OpenCV y C

Dentro de la propiedades del lado izquierdo, damos clic sobre C/C++, posteriormente en general y en «AdditionalIncludeDirectories».

Aquí adentro agregamos las rutas donde se encuentran las librerías en nuestra computadora.

Page 5: Instrucciones OpenCV y C

Dentro de las mismas propiedades damos clic en «Linker», y dentro de el en «input».

Una vez aquí en «Additional Dependencies» también agregamos las librerías con la ruta de nuestra computadora,

Page 6: Instrucciones OpenCV y C

Para agregar imágenes

Dentro de «int_tmain» el cual es el cuerpo de nuestro programa, declaramos las variables con la instrucción «IPlImage  *(nombre) = 0;». En nombre podemos asignar cualquier nombre que deseemos.

En este caso los nombres son img1 y img2

Page 7: Instrucciones OpenCV y C

Después a cada nombre de imagen le asignamos la dirección donde se encuentra guardada nuestra imagen.

Si: Se encuentra dentro del mismo proyecto solo es necesario poner … y la ruta dentro del proyecto.

Se encuentra en cualquier otro lado es necesario escribir la ruta completa.

Page 8: Instrucciones OpenCV y C

Con «cvNamedWindow» creamos la pantalla donde se mostrara la imagen, el nombre puede ser cualquiera, en este caso «DISPLAY».

Posteriormente en «cvShowImage» asignamos a la pantalla (DISPLAY), que imagen mostraremos. En este caso la «img1».

Por ultimo «cvWaitKey ()» es para esperar cualquier tecla antes de continuar.

Page 9: Instrucciones OpenCV y C
Page 10: Instrucciones OpenCV y C

Con «cvShowImage» mostramos la siguiente imagen «img».

Con «cvWaitKey» esperamos una tecla para continuar. Con «return 0;» terminamos el programa.

Page 11: Instrucciones OpenCV y C
Page 12: Instrucciones OpenCV y C

Crear puntos

Con «CvPoint» declaras variables que servirán como punto A, B, C, D y E. Con A.x asignas la ubicación del punto A en el eje x, en este caso en el pixel 0. Con A.y asignas la ubicación del punto A en el eje y, en este caso en el pixel 0. Con B.x asignas la ubicación del punto B en el eje x, en este caso al ultimo pixel 

que se encuentra a lo ancho de la img1. Con B.y asignas la ubicación del punto B en el eje y, en este caso al ultimo pixel 

que se encuentra a lo alto de la img1. Para asignar el ancho y alto se utiliza el comando «nombre imagen ‐> width o 

height».

Page 13: Instrucciones OpenCV y C

Con «cvLine» creamos la línea, en este caso la creamos sobre img1, del punto A al punto B, con «CV_RGB»asignas el color de la línea modificando los tres canales, con 10 asignas el ancho de línea, con 25 el tipo de línea y finalmente 0.

Con «cvShowImage» muestra la línea en la pantalla «DISPLAY».

Dibujar Líneas

Page 14: Instrucciones OpenCV y C

Con «cvRectangle» creas un rectángulo, defines en que imagen img1, después el punto superior izquierdo A, luego el punto inferior derecho B, con «CV_RGB»asignas el color al rectángulo, con 10 el ancho de línea y con 8 el tipo de línea.

Con «cvShowImage» muestras el rectángulo en la pantalla «DISPLAY».

Dibujar Rectángulo 

Page 15: Instrucciones OpenCV y C

Dibujar circulo

Con E.x definimos la ubicación del punto E en el eje x, en este caso con width/2 a la mitad de la img1.

Con E.y definimos la ubicación del punto E en el eje y, en este caso con height/2 a la mitad de la img1.

Con «cvCircle» creamos el circulo en la img1, con centro en el punto E, con un radio de 100 pixeles, con CV_RGB asignamos el color a la línea del circulo, con 10 el ancho de la línea y con 8 el tipo de línea.

Con «cvShowImage» mostramos el circulo en la pantalla «DISPLAY».

Page 16: Instrucciones OpenCV y C
Page 17: Instrucciones OpenCV y C

Detector de Contornos

Comenzamos declarando 3 variables int las cuales son key, th_1 y th_2.

Declaramos la imagen src con «IplImage *nombre». A src le asignamos un clon con «cvCloneImage»proveniente de la imagen img_gray_scale declarada anteriormente.

Finalmente declaramos la imagen dst con «IplImage * nombre»

Page 18: Instrucciones OpenCV y C

Ciclar programa

Con el fin de poder controlar ciertos parámetros con las teclas tenemos que ciclar nuestro programa. Con while { abrimos el ciclo. Dentro del ciclo creamos la imagen dst con «cvCreateImage», además al mismo tamaño de src, esto lo hacemos obteniendo el tamaño con «cvGetSize(imagen)».

Page 19: Instrucciones OpenCV y C

Detección 

Con «cvCanny» detectamos el contorno, para esto lleva ciertos parámetros. Primero lleva de que imagen se va a detectar en este caso src, después lleva la imagen donde se mostrara el contorno en este caso dst, luego lleva dos valores th_1 y th_2 con los que variando podemos detectar mas o menos contornos.

Con «cvShowImage» mostramos la imagen en DISPLAY. Con «cvWaitKey» esperamos que se oprima una tecla.

Page 20: Instrucciones OpenCV y C
Page 21: Instrucciones OpenCV y C

Ciclo para controlar con teclado

A la variable key le asignamos que espera una tecla. Creamos el ciclo switch y le asignamos que verifique la variable key Si se presiona 1 case 49, th_1 disminuye en 10. Si se presiona 2 case 50, th_1 aumenta en 10. Si se presiona 3 case 51, th_2 disminuye en 10. Si se presiona 4 case 52, th_2 aumenta en 10. Si se presiona  esc case 27, se finaliza el swtich.

Con esto detectamos que teclas se presiona y modificamos las variables th_1 y th_2. Los numero de case se obtienen en base al código ASCII.

Page 22: Instrucciones OpenCV y C

Imprimir valores

Con «printf» imprimimos texto en este caso imprimimos 2 con nombre de th_1 = %d y th_2 = %d y a este texto le asignamos las variables th_1 y th_2 respectivamente

Con «cvWaitKey» esperamos que se presione una tecla.

Con } cerramos el ciclo while. end: es en donde se rompe el switch.

Page 23: Instrucciones OpenCV y C
Page 24: Instrucciones OpenCV y C

Liberar espacio

Con «cvReleaseImage» eliminamos cada una de las imágenes que se crearon img1, img_gray_scale, etc.

Con «cvDestroyWindow» eliminamos la pantalla DISPLAY.

Con return 0 se termina el programa.

Page 25: Instrucciones OpenCV y C

Trackbars 

Para el control por track bar primero se declaran las cabeceras de funciones «void nombre(int nombre)», además se declaran variables «int nombre=inicializa»

Page 26: Instrucciones OpenCV y C

Creando track bars

El track bar se crea con «cvCreateTrackbar», y lleva de parámetros: Nombre del track bar (Radio_Y,) En que pantalla se mostrara(DISPLAY) Nombre de la variable a controlar antecedida por & (&slider_Cy) Numero final de longitud de track bar (1000) Nombre de la función que controla el trackbar ( F_inc_Cy)

Page 27: Instrucciones OpenCV y C

Ciclo trackbar

Se declara la variable int  nombre ( int key) Se inicia ciclo while { Se espera que se presione una tecla y se le asigna a la variable creada. (key=cvWaitKey(1))

Se abre un ciclo switch analizando la variable (key)

Page 28: Instrucciones OpenCV y C

En el switch: Si es un caso 13 que es cuando se presiona enter, se dibujara un circulo con cvCircle(nombre de la imagen donde se dibuja, nombre de la variable que controla el centro del circulo, nombre de la variable que controla el radio del circulo, colores con CV_RGB(r,g,b), ancho de línea y 8)

Si es un caso 27 que es cuando se presiona esc se finaliza el ciclo en end:

Page 29: Instrucciones OpenCV y C

Creando las funciones

Después de declara la cabecera de funciones hay que definir las funciones de servicios, estas se crean al final del programa fuera del programa principal main.

Se comienza con void F‐inc_Cy(int h), nombre de la función designado cuando se declaro Y dentro de la función se pone la acción, en este caso la posición del track bar guardado 

en la variable slider_Cy se le asigna a la variable C_circulo.y que define la posición del centro del circulo en el eje y

En la función void F_inc_Cx se le asigna el valor de slider_Cx a la variable C_circulo.x que es la posición en el eje x del centro del circulo

Page 30: Instrucciones OpenCV y C
Page 31: Instrucciones OpenCV y C

Función umbral

Se declaran dos variables int i y j. Se crea una imagen con «IplImage *nombre=0;» A la imagen creada se le asigna una imagen «img_tmp=cvCloneImage(img_gray_scale);»

Se crea una variable uchar* nombre; Se abre el ciclo while(1){

Page 32: Instrucciones OpenCV y C

Ciclo para analizar la imagen con función umbral

A la imagen img_gray_scale se le asigna un clon de la img_tmp con el objetivo que continuamente se este haciendo la función umbral al mover un track bar de lo contrario solo se haría una vez.

Se abre un ciclo for donde analizaremos la variable ifor(i=o, mientras i sea menor que el ancho lo seguirá 

haciendo, cada vez que analice suma uno a la cuenta de i) Se abre un ciclo j dentro del i para analizar el alto de la imagen

Page 33: Instrucciones OpenCV y C

Dentro del ciclo j se realiza la función umbral Intensidad= &((uchar*)(imagen a analizar‐>imageData + imagen a analizar ‐>widthStep*variablej))[i];

Y luego se determina las condicionantes: si Intensidad es menor que lo que hay en la variable umbral entonces la intensidad se pondrá en 0. (if(Intensidad[0]<= umbral){Intensidad[0]=0})

De lo contrario Intensidad será igual a 255(else{ Intensidad[0]=255)

Page 34: Instrucciones OpenCV y C

Para mostrar el resultado de la función se hace con cvShowImage.

Se espera el clic de una tecla para borrar la imagen con cvReleaseImage con el fin de no saturar la memoria.

Page 35: Instrucciones OpenCV y C

La variable umbral con la que es comparada Intensidad 2 presentaciones anteriores es una función cuya definición es la de la imagen

A la variable umbral se le asigna el valor contenido en la variable slider_Cy obtenido a partir de un trackbar

Page 36: Instrucciones OpenCV y C
Page 37: Instrucciones OpenCV y C
Page 38: Instrucciones OpenCV y C

Captura desde Cámara

Comenzamos con la declaración de variables CvCapture* nombre es para la cámara

Page 39: Instrucciones OpenCV y C

Inicializamos la captura con cvCaptureFromCAM(0) y se lo asignamos a la variable capture.

Revisamos  con if si existe captura si no el programa finaliza.

Nota: el “0” de la cámara es el índice, se modifica según la cámara que usemos.

Page 40: Instrucciones OpenCV y C

En frame se asigna un cvQueryFrame con capturecomo variable.

Se clona frame y se asigna a imagen.

Se revisa si frame existe con if, si no termina.

Page 41: Instrucciones OpenCV y C

Finalmente se muestra en pantalla webcam lo que tenemos en imagen.

Page 42: Instrucciones OpenCV y C
Page 43: Instrucciones OpenCV y C

Detección de círculos

CvMemStorage* storage = cvCreateMemStorage(0) con esto  creamos un lugar de memoria para guardar los datos de los números.

CvSeq*circles, para crear la secuencia Con circles=cvHoughCircles(imagen, variable donde se guarda, método entrada, 2, min dist, 10, 120, 5, 300) hacemos la identificación de los círculos.

Nota: con los parámetros de numero se varían para modificar cuantos círculos detecta.

Page 44: Instrucciones OpenCV y C

Se crea un for para mostrar en la imagen cada circulo detectado y los datos de cada circulo.

Se hace con float*nombre=(float*)cvGetSeqElem(circles,i).es decir datos=obtener secuencia(de círculos, en posición i)

Page 45: Instrucciones OpenCV y C