Monografias.com > Computación
Descargar Imprimir Comentar Ver trabajos relacionados

Tipos de datos en OpenCV




Enviado por Pablo Turmero



Partes: 1, 2


    Monografias.com
    Tipos de datos en OpenCV
    Tipos de datos auxiliares
    El tipo IplImage
    Almacenamiento de las imágenes
    Operaciones de entrada/salida
    Ejercicios

    Monografias.com
    Tipos de datos auxiliares:
    CvPoint: coordenadas de un punto (un píxel) en una imagen. La numeración de filas y columnas empieza en 0.
    typedef struct CvPoint {
    int x;
    int y;
    } CvPoint;

    CvSize: tamaño de una región rectangular, en píxeles.
    typedef struct CvSize {
    int width; // Anchura
    int height; // Altura
    } CvSize;

    Monografias.com
    CvRect: rectángulo en la imagen, dado por el píxel superior izquierdo, anchura y altura.
    typedef struct CvRect {
    int x;
    int y;
    int width; // Anchura
    int height; // Altura
    } CvRect;

    CvScalar: escalar o valor de un píxel, que puede contener 1, 2, 3 ó 4 números (según el número de canales).
    typedef struct CvScalar {
    double val[4];
    } CvScalar;

    Monografias.com
    Estos tipos aparecerán en los parámetros de las llamadas a muchas de las funciones.
    Existen funciones inline para crear e inicializar variables de estos tipos de datos: cvPoint, cvSize, cvRect, cvScalar, cvScalarAll.

    CvPoint pt1= cvPoint(3,4), pt2;
    pt2.x= 5; pt2.y= 8;
    printf(“%d”, cvSize(100, 200).width);
    … cvRect(2, 2, 50, 50) …
    … cvScalarAll(3) … cvScalar(5, 7, 9) …
    cvLine(imagen, pt1, pt2, color);
    cvLine(imagen, cvPoint(1,1), cvPoint(10,10), color);

    Monografias.com
    En las funciones para dibujar (puntos, líneas, círculos, elipses, etc.) el color se representa mediante un CvScalar, que almacena los canales RGB.
    Ejemplo, función para dibujar un círculo:
    void cvCircle(… CvPoint center, int radius, CvScalar color, …)

    Para crearlo se puede usar el macro CV_RGB(r, g, b):

    #define CV_RGB(r, g, b) cvScalar((b), (g), (r))

    cvCircle(img, cvPoint(100,100), 50, CV_RGB(0,0,255));

    Color azul

    Monografias.com
    El tipo IplImage
    El tipo de datos para representar imágenes es el tipo IplImage (… las clásicas librerías IPL…)
    Las imágenes se guardan descomprimidas, como una matriz de píxeles que podemos consultar y modificar.
    Principales propiedades de una imagen:
    Tamaño (size): anchura (width) y altura (height).
    Profundidad de píxeles (depth): enteros de 8, 16 y 32 bits, reales de 32 y 64 bits.
    Número de canales (nChannels): 1, 2, 3 ó 4.
    Origen de coordenadas (origin): top-left, bottom-left; y orden de los canales (dataOrder): entrelazado de píxeles (0) o por canales (1).

    Monografias.com
    Las variables manejadas serán punteros a IplImage.
    Creación de una imagen:
    IplImage* cvCreateImage(CvSize size, int depth, int channels)
    size: tamaño de la imagen
    depth: profundidad de píxel:
    IPL_DEPTH_8U – unsigned 8-bit integers
    IPL_DEPTH_8S – signed 8-bit integers
    IPL_DEPTH_16S – signed 16-bit integers
    IPL_DEPTH_32S – signed 32-bit integers
    IPL_DEPTH_32F – single precision floating-point numbers
    IPL_DEPTH_64F – double precision floating-point numbers
    channels: número de canales: 1, 2, 3 ó 4
    Implícitamente, el origen es top-left y el orden es entrelazado. Con imágenes RGB el orden es: b0, g0, r0, b1, g1, r1, …

    Monografias.com
    Definición del tipo IplImage. Observar que algunos campos no se usan en OpenCV (sólo se usaban en IPL).

    typedef struct _IplImage {
    int nSize; /* sizeof(IplImage) */
    int ID; /* version (=0)*/
    int nChannels; /* Most of OpenCV functions support 1,2,3 or 4 channels */
    int alphaChannel; /* ignored by OpenCV */
    int depth; /* pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported */
    char colorModel[4]; /* ignored by OpenCV */
    char channelSeq[4]; /* ditto */
    int dataOrder; /* 0 – interleaved color channels, 1 – separate color channels. cvCreateImage can only create interleaved images */
    int origin; /* 0 – top-left origin, 1 – bottom-left origin (Windows bitmaps style) */

    Monografias.com
    int align; /* Alignment of image rows (4 or 8).
    OpenCV ignores it and uses widthStep instead */
    int width; /* image width in pixels */
    int height; /* image height in pixels */
    struct _IplROI *roi; /* image ROI. when it is not NULL, this specifies image region to process */
    struct _IplImage *maskROI; /* must be NULL in OpenCV */
    void *imageId; /* ditto */
    struct _IplTileInfo *tileInfo; /* ditto */
    int imageSize; /* image data size in bytes (=image->height* image->widthStep) in case of interleaved data)*/
    char *imageData; /* pointer to aligned image data */
    int widthStep; /* size of aligned image row in bytes */
    int BorderMode[4]; /* border completion mode, ignored by OpenCV */
    int BorderConst[4]; /* ditto */
    char *imageDataOrigin; /* pointer to a very origin of image data (not necessarily aligned) it is needed for correct image deallocation */
    } IplImage;

    Monografias.com
    Almacenamiento en memoria de los datos
    Los píxeles de la imagen están referenciados en:char *imageData;
    Los píxeles se almacenan por filas, de izquierda a derecha, empezando por la fila superior o la inferior (según origin sea 0 ó 1, respectivamente).
    Entre una fila y la siguiente hay widthStep bytes (al final de la fila pueden sobrar algunos bytes, con el propósito de alinear las filas).
    int width= 2
    int height= 2
    int nChannels= 3
    int depth= 8U
    char *imageData
    IplImage *img
    widthStep= 8

    Partes: 1, 2

    Página siguiente 

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter