Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

OpenCV

No description
by

Mike Marin

on 11 May 2015

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of OpenCV

Procesamiento de Imagen
en OpenCV

OpenCV maneja tres tipos de imagen, independientemenete del formato, para su procesamiento y estos son: BGR, HSV y Escalas de Grises.
OpenCV (Open Source Computer Vision Library), es una coleccion de algoritmos numericos de vision por computadora, procesamiento de imagenes y algoritmos de proposito general muy eficiente, implementado en C y C++. Cuenta con una licencia parecida a la de BSD, lo cual signific que es copletamente gratis para uso academico y comercial.

Se encuentra disponible en:
http://opencv.org/downloads.html


Desde la version 1.14, NAOqi cuenta con soporte para implementar OpenCV 2.3.1.

Los modulos principales implementados son:


BGR
Son imagenes con 3 canales de color (Azul, Verde y Rojo)
¿Que es OpenCV?
OpenCV y NAO
Thats it ;)
Aplicaciones
Estos algoritmos permiten identificar objetos, caras, clasificar acciones humanas en vídeo, hacer tracking de movimientos de objetos, extraer modelos 3D, encontrar imágenes similares, eliminar ojos rojos, seguir el movimiento de los ojos y reconocer escenarios.

Se usa en aplicaciones como la detección de intrusos en vídeos, monitorización de equipamientos, ayuda a navegación de robots, inspeccionar etiquetas en productos, etc. OpenCV tiene interfaces en C++, C, Python, Java y MATLAB interfaces y funciona en Windows, Linux, Android y Mac OS.
core
: contiene todas las estructuras basicas y funcionalidad.
highgui
: contiene todo lo referente a el display, abrir y guardar imagenes.
imgproc
: conversion de colores y aplicacion de filtros.
video
: flujo optico, substraccion de fondos y procesamiento de captura de video.
calib3d
: homografia, matrices y calibracion de camara y stereovision.
features2d
: deteccion de facciones, descriptores de imagen y sincronizaciones.
ml
: machine learning (redes neuronales y procesos de aprendizaje computacional)
flann
: uso eficiente de clusters y navegacion en bases de datos.
objectdetection
: deteccion de objetos con clasificadores Cascade o Haar.

HSV
El modelo HSV (Hue, Saturation, Value – Matiz, Saturación, Valor), define un modelo de color en términos de sus componentes.
Escala de
Grises
Es una escala empleada en la imagen digital en la que el valor de cada píxel posee un valor equivalente a una graduación de gris. Las imágenes representadas de este tipo están compuestas de sombras de grises,

En OpenCV resulta mas facil detectar objetos usando imagenes tipo HSV en binario, asi podemos ingresar rangos minimos y maximos de valores de Matiz, Saturacion y Valor, para solo detectar cierto color.

OpenCV maneja los siguientes valores HSV:
H: 0-180
S: 0-255
V: 0-255
Filtrado de Colores
Afinacion de la Imagen
Empleando el filtrado de colores con valores minimos y maximos, aun deja un poco de ruido en la imagen, ya que detecta cierto rango de valores, para poder hacer nuestro filtrado aun mas preciso podemos aplicar dos funciones de OpenCV, erosionado y dilatacion.

Como sus nombres lo dicen, el erosionado (
erode
) hace que los puntos en blanco isolados disminuyan o sean inexistentes y la dilatacion (
dilate
) hace que los puntos blancos existentes crezcan. Se recomienda que se ejecute primero la funcion de erosionado y despues la de dilatacion, para tener una mejor precision.
Ya que podemos localizar el objeto que buscamos, es posible dibujar alrededor del mismo, o señalar a alguna posicion en referencia a el objeto.

Se pueden utilizar las funciones de findContours y drawContours, asi como emplear una funcion que dibuje o escriba alguna figura geometrica o texto en referencia a su posicion.
Señalar Contorno y Referencias al Objeto
http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html

https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_tutorials.html

http://opencv.org/documentation.html

Referencias:
Para la captura de video se emplea
VideoCapture
y se asigna a una variable. Una vez que tenemos el "feed" (alimentacion) de video. Utilizamos la funcion
moments
la cual calcula todos los marcos que suceden dentro de nuestra captura. Como nuestra captura se convirtio a HSV, mostrara solo puntos blancos (dependiendo del color que busquemos), los cuales pueden ser enmarcados, podemos dibujar sobre ellos o podemos aplicar alguna funcion para establecer y resaltar su posicion.




Captura de Video y Rastreo Continuo
2
Instituto Tecnologico de Tijuana
Enero-Junio 2015
Inteligencia Artificial.
Serie: SCC-1002SC9A




Equipo: 2

Integrantes
:
Llamas Avalos Roberto (Líder y programador)
Gómez Valencia Cesar (Programador)
León Duran Salvador (Programador)
Martínez Rubio Mayelly (Documentadora)
Liang Jinlong (Documentador)
Marín Soto Miguel (Documentador)
Ortiz Aguirre Pedro (Analista)
Mártir Cristian (Analista)
Nevarez Jesús Omar (Analista)

3
4
5
6
7
8
9
10
11
12
13
25
Movimientos Basicos.
Detección de la pelota
ROJA
.

Recorrido (caminar) y posicionamiento del Nao.

Patada (Tiro).
14
Clases, metodos y eventos para la detección de la pelota.
ALRedBallDetection API
Clase:
ALRedBallDetectionProxy

Evento:
redBallDetected()

Key: [
TimeStamp,
BallInfo,
CameraPose_InTorsoFrame,
CameraPose_InRobotFrame,
Camera_Id
]

redBallDetected()
TimeStamp [
TimeStamp_Seconds,
Timestamp_Microseconds
]

BallInfo [
centerX,
centerY,
sizeX,
sizeY
]

16
17
18
ALRedBallTracker API
Clase:
ALRedBallProxy

Metodos:
startTracker()
setWholeBodyOn(bool)
isActive()
getPosition()
isNewData()
stopTracker()

19
ESPACIOS DE ORIENTACIÓN CARTESIANA.
15
Detectar pelota roja y caminar hacia ella.
def onInput_onStart(self):
value = self.TrackerRedBall()
postureProxy = ALProxy("ALRobotPosture")
if (value == True):
postureProxy.goToPosture("StandInit", 0.5)
def TrackerRedBall(self):
motion = ALProxy("ALMotion")
redBallTracker = ALProxy("ALRedBallTracker")

motion.setStiffnesses("Head", 1.0)

redBallTracker.startTracker()
time.sleep(10)

redBallTracker.stopTracker()
motion.setStiffnesses("Head", 0.0)
p = redBallTracker.getPosition()
motion.walkTo(p)

return True]]
>

20
21
Patada.
def onInput_onStart(self):
#Se crea el objeto de la clase Kick
object = Kick()
#Se llama al método toKick() de la clase Kick.
#toKick() es el método que ejecuta la patada
object.toKick()
Método para patear
def toKick(self):
motionProxy = ALProxy("ALMotion")
postureProxy = ALProxy("ALRobotPosture")
motionProxy.wakeUp()
postureProxy.goToPosture("StandInit", 0.5)
motionProxy.wbEnable(True)
motionProxy.wbFootState("Fixed", "Legs")
motionProxy.wbEnableBalanceConstraint(True, "Legs")
motionProxy.wbGoToBalance("LLeg", 2.0)
motionProxy.wbFootState("Free", "RLeg")
times = [2.0, 2.7, 4.5]
path = self.computePath(motionProxy, "RLeg", motion.FRAME_WORLD)
motionProxy.transformInterpolations("RLeg", motion.FRAME_WORLD, path, 63, times)
motionProxy.wbEnableEffectorOptimization("RLeg", False)
time.sleep(1.0)
motionProxy.wbEnable(False)
postureProxy.goToPosture("StandInit", 0.3)
Vector de matrices de transformación para la patada
def computePath(self, proxy, effector, frame):
#Traslación en el eje X (Enfrente-Atrás)
dx = 0.05
#Traslación en el eje Z (Arriba-Abajo)
dz = 0.05
#Rotación en el eje Y (Izquierda-Derecha). Convierte 5 grados a radianes.
dwy = 5.0 * almath.TO_RAD
path = []
currentTf = []
currentTf = proxy.getTransform(effector, frame, False)
#1. Mueve el pie hacia atrás
targetTf = almath.Transform(currentTf)
targetTf *= almath.Transform(-dx, 0.0, dz)
targetTf *= almath.Transform().fromRotY(dwy)
path.append(list(targetTf.toVector()))
#2. Mueve el pie hacia enfrente para patear
targetTf = almath.Transform(currentTf)
targetTf *= almath.Transform(dx, 0.0, dz)
path.append(list(targetTf.toVector()))
#3. Se regresa a la posición inicial
path.append(currentTf)

return path]]
>

22
23
24
Full transcript