uso_de_roi_y_coi

Uso de ROI y COI code format="c" /*Código de ejemplo:

Francisco Carlos Calderón

Libre de modificar difundir y aprender

2009

*/


 * 1) include 


 * 1) include 

int main(int argc, char** argv)

{

/* Declaración de *IplImage */

IplImage* Orig_Frame = 0;

IplImage* primera;

IplImage* segunda;

/* 1. Capturando y mostrando en pantalla */

Orig_Frame = cvLoadImage("lena.jpg", CV_LOAD_IMAGE_COLOR );

if(Orig_Frame == 0)//si no hay nada en la imagen. puede contener salida al usuario para mejor debuging :)

return -1;

cvNamedWindow ("Original", CV_WINDOW_AUTOSIZE);

cvShowImage ("Original", Orig_Frame);

/* 2. Modificando la ROI de la imagen original

hay tres funciones básicas para modificar la ROI

cv(Get|Set|Reset)ImageROI

CvRect cvGetImageROI( const IplImage* image );

Retorna un CvRect que muestra la region de interes de la imagen

void cvSetImageROI( IplImage* image, CvRect rect );

fija una ROI a la imagen

void cvResetImageROI( IplImage* image );

Quita la region de interes de la imagen para procesarla TODA

*/

CvRect reg_de_int = cvRect( 200, 200, 180, 200);

primera = cvCreateImage( cvSize(reg_de_int.width,reg_de_int.height), Orig_Frame->depth, Orig_Frame->nChannels );//note el cambio de tamaño

cvSetImageROI( Orig_Frame, reg_de_int );

cvCopy( Orig_Frame, primera);

cvResetImageROI( Orig_Frame );//para evitar errores si se sigue usando

cvNamedWindow ("primera", CV_WINDOW_AUTOSIZE);

cvShowImage ("primera", primera);

/* 3. Modificando el COI de la imagen original

hay dos funciones básicas para modificar el COI

cv(Get|Set)ImageCOI

cvSetImageCOI( IplImage* image, int coi );

fija un canal a la imagen 0 para Todos, 1, 2, 3 o 4 para seleccionar el respectivo canal

int cvGetImageCOI( const IplImage* image );

Retorna el canal de interés, 0 para Todos

*/

segunda = cvCreateImage( cvSize(Orig_Frame->width,Orig_Frame->height), Orig_Frame->depth, 1 );//note que hay solo un canal

cvSetImageCOI(Orig_Frame,1);//fija el primer canal "azul"

cvCopy( Orig_Frame, segunda);

cvSetImageCOI(Orig_Frame,0);//fija Todos los canales para poder volver a usar la imagen

cvNamedWindow ("segunda", CV_WINDOW_AUTOSIZE);

cvShowImage ("segunda", segunda);

cvWaitKey (0);

/*4. Liberar memoria y fin del programa*/

/* Es una buena practica liberar todo antes de salir del programa y no

confiar que windows haga todo el trabajo sucio :) */

cvReleaseImage( &Orig_Frame );

cvReleaseImage( &primera );

cvReleaseImage( &segunda);

return 0;

}

code