Uso del Mouse en OpenCV mediante Highgui y como dibujar lineas

/*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*/
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
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 );
    }
}
 
 
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;
}