Open Cv
Dr. Alfonso Alba Cadena Facultad de Ciencias, UASLP fac@fc.uaslp.mx Septiembre 2011
1
Sobre OpenCV
OpenCV (Open Source Computer Vision) es una librer´ de funciones escritas ıa en C/C++ para realizar tareas de procesamiento de im´genes y visi´n coma o putacional que van desde lo b´sico (acceso a pixeles individuales, despliegue en a pantalla, dibujo de formasgeom´tricas) hasta lo avanzado (filtrado, detecci´n e o de bordes, transformaciones geom´tricas). e OpenCV puede utilizarse bajo diversas plataformas (incluyendo Windows, MacOS, Linux, Android e iOS) y con diversos compiladores. En particular, en Windows soporta los compiladores Microsoft Visual C++ y MinGW (e.g., bajo Code::Blocks). Este documento contempla la versi´n 2.2 de OpenCV. o
2
EstructuraIplImage
La estructura IplImage contiene la informaci´n de una imagen y sus caraco ter´ ısticas (para mayores detalles consultar la gu´ de referencia de OpenCV). ıa Los principales campos de esta estructura son: • int width - contiene el ancho de la imagen en pixeles. • int height - contiene la altura de la imagen en pixeles. • int depth - indica el formato de los pixeles, de acuerdo a lassiguientes constantes – IPL_DEPTH_8U - Entero de 8 bits sin signo (e.g., escala de grises de 0 a 255). – IPL_DEPTH_8S - Entero de 8 bits con signo. – IPL_DEPTH_16U - Entero de 16 bits sin signo. – IPL_DEPTH_16S - Entero de 16 bits con signo. – IPL_DEPTH_32S - Entero de 32 bits con signo.
– IPL_DEPTH_32F - Punto flotante de 32 bits (la escala de grises toma el rango de 0 a 1). – IPL_DEPTH_64F -Punto flotante de 64 bits (la escala de grises toma el rango de 0 a 1). • int nChannels - n´ mero de canales (e.g., 1 para im´genes en escala de u a grises, 3 para im´genes RGB). a • char *imageData - apuntador al arreglo que contiene la imagen. El programador debe realizar la conversi´n al tipo de apuntador adecuado, de o acuerdo al campo depth. • int widthStep - n´mero de bytes que ocupa cada rengl´nde la imagen u o en el arreglo imageData. Este valor puede ser mayor que el que requiere el ancho de la imagen. La imagen contenida en una estructura IplImage est´ organizada como un a arreglo bidimensional en orden lexicogr´fico; sin embargo, por razones de efia ciencia, el n´mero de columnas en este arreglo no es necesariamente igual al u n´mero de pixeles en cada rengl´n de la imagen. El campowidthStep de u o la estructura IplImage indica exactamente cu´ntos bytes ocupa cada rengl´n a o de la imagen dentro del arreglo. En otras palabras, el apuntador dado por imageData + y * widthStep precisamente apunta al inicio del y-´simo rengl´n e o de la imagen. Sin embargo, es importante recordar que este apuntador est´ a definido como apuntador a char y en muchos casos ser´ necesario realizar una typecast al tipo de apuntador adecuado para el formato de la imagen. Considere el siguiente ejemplo: #include int main() { IplImage *img;
// img es un apuntador a una estructura IplImage
// Aqui creamos la estructura y reservamos espacio para una imagen // de 320x240 pixeles en formato de punto flotante (32 bits) y // en escala de grises (un solo canal) img = cvCreateImage(cvSize(320,240), IPL_DEPTH_32F, 1); // Ahora asignamos al pixel (160,120) el color blanco float *row = (float *)(img->imageData + 120 * img->widthStep); row[160] = 1; cvShowImage("imagen", img); // Despliega la imagen cvWaitKey(-1); // Espera una tecla cvReleaseImage(&img); // Libera la imagen return 0; } 2
3
Funciones B´sicas a
IplImage *cvCreateImage(CvSize size, int depth, int channels); Crea unaimagen con un tama˜o, formato y n´mero de canales dado, y n u devuelve un apuntador a la estructura IplImage correspondiente. void cvReleaseImage(IplImage **image); Libera la memoria utilizada por una imagen. void cvSet(CvArr *arr, CvScalar value, const CvArr *mask = NULL); Llena una matriz o una imagen con un mismo valor. El tercer par´metro es a opcional y define una m´scara que determina que...
Regístrate para leer el documento completo.