mouse_memoria_lineas

Uso del Mouse en OpenCV mediante Highgui y como dibujar lineas

code format="c" /*Código de ejemplo: Francisco Carlos Calderón Libre de modificar difundir y aprender 2009        */ /*Modificación de .../opencv/samples/c/inpaint.c para mostrar el uso del mouse en HighGUI*/ IplImage* inpaint_mask = 0; IplImage* img0 = 0, *img = 0, *inpainted = 0; CvPoint prev_pt = {-1,-1}; void on_mouse( int event, int x, int y, int flags, void* ) {   if( !img )//si no se creo la imagen salga return; if( event == CV_EVENT_LBUTTONUP || !(flags & CV_EVENT_FLAG_LBUTTON) )//si solte el boton del mouse o no tengo el mouse izquierdo oprimido dentro de la ventana prev_pt = cvPoint(-1,-1); else if( event == CV_EVENT_LBUTTONDOWN )//de lo contrario si di click prev_pt = cvPoint(x,y);//guarde donde di click else if( event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON) )//de lo contrario si moví el mouse y tenia oprimido el boton izquierdo {//pinte: CvPoint pt = cvPoint(x,y); if( prev_pt.x < 0 )//si habia soltado el mouse o estaba fuera de la ventana en el evento anterior inicie punto prev_pt = pt;//en la siguiente linea no hay problema como prev_pt = pt no se pinta ninguna linea funciona en la siguiente llamada cvLine( img, prev_pt, pt, CV_RGB(10,50,200), 20, CV_AA, 0 ); /*void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,            int thickness=1, int line_type=8, int shift=0 ); 8 (or 0) - 8-connected line. 4 - 4-connected line. CV_AA - antialiased line. */       prev_pt = pt; cvShowImage( "image", img ); } }
 * 1) include "stdafx.h"
 * 2) include "cv.h"
 * 3) include "highgui.h"
 * 4) include 
 * 5) include 

int main( int argc, char** argv ) {   char* filename = argc >= 2 ? argv[1] : (char*)"lena.jpg"; if( (img0 = cvLoadImage(filename,-1)) == 0 ) return 0; printf( "Esc para salir r para reiniciar tu arte :P \n" ); cvNamedWindow( "image", 1 );//cambielo a 0 para poder cambiar el tamaño de la ventana y ver la diferencia de la linea que se genera cambiando el Line_Type //img = cvCloneImage( img0 );//¿por que use clone Image acá? img = cvCreateImage( cvSize(img0->width,img0->height), img0->depth, img0->nChannels ); cvCopy( img0, img ); cvShowImage( "image", img ); cvSetMouseCallback( "image", on_mouse, 0 ); for {       int c = cvWaitKey(0); if( c == 27 )//Esc break; if( c == 'r' ) {           cvCopy( img0, img ); //img = cvCloneImage( img0); cvShowImage( "image", img ); // Ejercicio que pasa si en ves de cvCopy uso de nuevo cvCloneImage???? // pista: no me responsabilizo por lo que le pase a su PC y no le eche la culpa a Windows!!! //       usted solo oprimio r muuuchas veces :)

}   }    return 0; }

code