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 : la visión por computadora al alcance de todos

No description
by

Jean-Bernard Hayet

on 4 May 2012

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of OPENCV : la visión por computadora al alcance de todos

OpenCV: la visión por computadora
al alcance de todos

J.B. Hayet
CIMAT A.C.
OpenCV:
Librería de visión por computadora.
Orientada a visión en tiempo real.
Muy popular y muy fácil de usar.
Usada e alimentada por investigadores de todo el mundo.
En general muy bien optimizada.
OpenCV:
Creada por Intel, mantenida por Willow Garage (ROS...) y itseez.
Open source y libre (lic. BSD)
Interfaces : C, C++, python, java...
Linux, Window, Mac, Android...
Ahora versión 2.4 y 3.0
OpenCV: ayuda
OpenCV: ayuda
OpenCV: donde bajarlo
http://docs.opencv.org/
Documentación en linea:
http://tech.groups.yahoo.com/group/OpenCV
Grupo de usuarios:
Foros, libros, tutoriales en la www...
git clone git://github.com/Itseez/opencv.git

Git:
http://sourceforge.net/projects/opencvlibrary/
Fuentes:
Paquetes Linux: libopencv-dev, ...
OpenCV: ¿para qué?
OpenCV: ¿para qué?
OpenCV es la herramienta ideal para el desarrollo rápido de aplicaciones de visión por computadora eficientes.
Realidad aumentada
OpenCV: organización
OpenCV: matrices
// Make a 10x10 color matrix (image of floats) // filled with the color (100,200,100)
Mat A(10,10,CV_32FC3,Scalar(100,200,100));

// B, with the same dimension, filled with
// zeros
Mat B = Mat::zeros(10,10,CV_32FC3);

// C is the sum of A and B
Mat C = A+B;
Tracking
Visión robótica
Visión por computadora puede involucrar algoritmos muy diversos
Optimización
Procesamiento de imágenes
Visión 3D
Machine learning
Detección/recognición
de caras
Colorización
Papel central en una gran parte de la libreria
El tipo correspondiente se llama Mat
Maneja una gran variedad de matrices
Apuntadores inteligentes: no preocuparse por liberación de memoria
La mayoría de los operadores usuales implementados como operadores C++
Ejemplo: cv::Mat
Biometría
Tamaño
Tipo del contenido : flotantes 32 bits, 3 canales
Mat O= Mat::ones(7,8,CV_64FC1);
Mat I = Mat::eye(5,5, CV_32F);
Mat Z = Mat::zeros(1,5, CV_8U);

double datos[4] = {5.0,9.0,-1.0,7.0};
Mat mDatos(2,2,CV_64F, datos); // Only header
Mat clones = mDatos.clone(); // Data copied
Ejemplo: cv::Mat
OpenCV: matrices

No se necesita siempe hacer copias de los datos, sino copiar el encabezado
Aceso a sub-matrices: lineas, columnas, sub-matrices...
Re-shaping (p.ej. : ver una matrix 2x2 como un vector 4x1)
Mat AL = A.row(2); // Get line 2 of A
Mat AC = A.col(3); // Get column 3 of A
Mat ALR = A.rowRange(2,3);
Mat ACR = A.colRange(5,9);
Rect r(3,3,4,4);
Mat AR = A(r);// Get sub-matrix from A set by r

Mat copy = A; // Remember data stay in A !
Mat clon = A.clone(); // Data are cloned (new data)
Point_ : puntos 2d (template)
Point3_ : puntos 3d (template)
Size_ : tamaño (template)
Vec_ : vector (template)
Scalar : vector de 4 elementos
Rect : rectángulo
Range : rángo de valores enteras
OpenCV: mas tipos
OpenCV: funcionalidades
OpenCV: funcionalidades
OpenCV: funcionalidades
OpenCV: funcionalidades
OpenCV: funcionalidades
OpenCV: funcionalidades
Maestría en Ciencias de la Computación, CIMAT, A.C.
Maestría en Ciencias de la Computación, CIMAT, A.C.
OpenCV: lo caliente
Soporte Android
Integración en GPGPU (CUDA)
Integración del Kinect
Algoritmos muy recientes de extracción de features 2d
OpenCV: en resumen
¿ Preguntas ?
J.B. Hayet
CIMAT A.C.
Clases de procesamiento de imagenes, vision, robotica, reconocimiento de patrones.
Grupo de investigación muy fuerte al nivel nacional.
Vida academica intensa.
Lazos fuertes con varios grupos en Europa y EU.
Estatus del estudiante.
Examenes de entrada: Mayo (7/8) y Junio (12/13)
www.cimat.mx
g++ helloworld.cpp -o helloworld -I/usr/local/include/ -lopencv_highgui -lopencv_core -lopencv_imgproc
OpenCV: compilar en Linux
En linea de comando: si OpenCV está instalado en /usr/local
OpenCV: ¿para qué?
Visión por computadora = ciencia de interpretar imágenes
Datos numéricos
(valores de píxeles)
Semántica
Identificar sillas
Identificar personas
Medir distancias
Ubicarse c.r. al suelo.....
OpenCV: ¿para qué?
OpenCV: ¿para qué?
Problema muy difícil para una computadora
Avances críticos que han permitido avances:
Geometría proyectiva en los 80s/90s
Machine learning
en los 90s/2000s
Varios problemas están ahora bien manejados
OpenCV es un compendio de algoritmos existentes en el área
Credit : K. Murphy
OpenCV: overview
Credit: G. Bradsky
(los programadores en C++ o python)
Submatrices de cv::Mat
Matrices = Encabezados + datos
OpenCV: matrices
OpenCV: matrices
Acceso a datos de matrices:
Por un operador template at<T>(i,j)
Por iteradores
Por recorrido directo de los datos en memoria
Mat D= Mat::ones(50,50,CV_64FC1);

// Acess to data : way 1
double data = D.at<double>(10,15);

for (int i = 0; i<D.rows;i++)
for (int j=0; j < D.cols; j++)
D.at<double>(i,j) += 10.0;
Aceso a datos de cv::Mat
Mat D= Mat::ones(50,50,CV_64FC1);

// Acess to data : way 2
Mat_<double>::iterator it = D.begin<double>();
for (;it!=D.end<double>();it++)
*it += 10.0;
Aceso a datos de cv::Mat
Mat D= Mat::ones(50,50,CV_64FC1);

// Acess to data : way 3
for (int i=0;i<D.rows;i++) {
double *rowData = D.ptr<double>(i);
for (int i=0;i<D.cols;j++)
rowData[j] += 10.0;
}
Aceso a datos de cv::Mat
Operadores de cálculo
Entre mátrices
Entre una mátriz y un escalar
Sobre una sola mátriz

D *= 2.5;
D += A;
C = E - D;
V = e.cross(f);
I = D.inv();
T = D.t();
Operadores de cv::Mat
OpenCV: desplegar resultados
Sistema simple de ventanas, con título
Funcíon imshow para desplegar una imagen (matriz)
Interfaz sencilla: captura de teclado/clics y sistema de trackbar
OpenCV: inputs
Función imread que permite leer un gran rango de imagenes en cv::Mat
Captura de vídeo en vivo (camara conectada, Kinect...) o desde archivo con VideoCapture
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

#include <ctype.h>
#include <stdio.h>
#include <iostream>

using namespace cv;
using namespace std;


int thresh = 100;

int main( int argc, char** argv )
{
VideoCapture cap;
if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))
cap.open(argc == 2 ? argv[1][0] - '0' : 0);
if( !cap.isOpened() )
{
cout << "Could not initialize capturing...\n";
return -1;
}

namedWindow("Input", CV_WINDOW_AUTOSIZE);
namedWindow("Gray-value input", CV_WINDOW_AUTOSIZE);
namedWindow("Thresholded input", CV_WINDOW_AUTOSIZE);
createTrackbar( "Threshold", "Thresholded input", &thresh, 200, NULL);

for(;;) {
Mat frame,gray,grayThresh;
cap >> frame;
if( frame.empty() )
break;

// Convert to gray
cvtColor(frame, gray, CV_BGR2GRAY); //color images are BGR!
threshold(gray, grayThresh, thresh, 190, CV_THRESH_BINARY);
imshow("Input", frame);
imshow("Gray-value input", gray);
imshow("Thresholded input", grayThresh);

// Intercept key (for 30 ms)
int c = waitKey(30);
// To quit
if( c == 'q' || c == 'Q' || (c & 255) == 27 )
break;
}
return 0;
}
Un helloworld
En cualquier IDE se necesita simplemente indicar las librerías con que ligar y su path.
core. The Core Functionality
imgproc. Image Processing
highgui. High-level GUI and Media I/O
video. Video Analysis
calib3d. Camera Calibration and 3D Reconstruction
features2d. 2D Features Framework
objdetect. Object Detection
ml. Machine Learning
flann. Clustering and Search in Multi-Dimensional Spaces
gpu. GPU-accelerated Computer Vision
photo. Computational Photography
stitching. Images stitching
nonfree. Non-free functionality
contrib. Contributed/Experimental Stuff
legacy. Deprecated stuff
Organizada en módulos (una librería dinámica por modulo)
void Canny(InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false );
Credit: G. Bradsky
void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta, int threshold, double minLineLength=0, double maxLineGap=0 )
Credit: G. Bradsky
Credit: doc. OpenCV
void pyrDown(InputArray src, OutputArray dst, const Size& dstsize=Size())
Credit: doc. OpenCV
void dilate(InputArray src, OutputArray dst, InputArray element, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() )
OpenCV: funcionalidades
OpenCV: funcionalidades
Credit: M. Labbé
SURF(double _hessianThreshold, int _nOctaves=4,
int _nOctaveLayers=2, bool _extended=false);
Credit: doc. OpenCV
Credit: doc. OpenCV
OpenCV: funcionalidades
void detectMultiScale( const Mat& image, vector<Rect>& objects,
double scaleFactor=1.1, int minNeighbors=3,
int flags=0, Size minSize=Size());
void calcOpticalFlowPyrLK(const Mat& prevImg, const Mat& nextImg, const vector<Point2f>& prevPts, vector<Point2f>& nextPts, vector<uchar>& status, vector<float>& err, Size winSize=Size(15, 15), int maxLevel=3, TermCriteria criteria=TermCriteria( TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01), double derivLambda=0.5, int flags=0)
void stereoRectify(const Mat& cameraMatrix1, const Mat& distCoeffs1, const Mat& cameraMatrix2, const Mat& distCoeffs2, Size imageSize, const Mat& R, const Mat& T, Mat& R1, Mat& R2, Mat& P1, Mat& P2, Mat& Q, int flags=CALIB_ZERO_DISPARITY)
RotatedRect CamShift(const Mat& probImage, Rect& window, TermCriteria criteria)
Librería de visión por computadora
Más de 2000 funciones
Fácil de usar
En evolución constante
Próximos eventos en CIMAT
Verano de computación : julio
Statistical Pattern Recognition : 6-7 sept.
Taller-Escuela de Procesamiento de imágenes : 17-18 oct.
Taller de Neuro-imagenes : 19 oct.

www.cimat.mx
Full transcript