From f29ff03b88ab33d418c575a28447d65167d054bb Mon Sep 17 00:00:00 2001 From: "N.N." Date: Sun, 30 Aug 2009 19:07:04 +0000 Subject: fixed mouse pointing ( almost ) svn path=/trunk/externals/pix_opencv/; revision=12146 --- pix_opencv_lk.cc | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'pix_opencv_lk.cc') diff --git a/pix_opencv_lk.cc b/pix_opencv_lk.cc index 65daa24..57edaf1 100755 --- a/pix_opencv_lk.cc +++ b/pix_opencv_lk.cc @@ -109,6 +109,13 @@ void pix_opencv_lk :: processRGBAImage(imageStruct &image) this->comp_xsize=image.xsize; this->comp_ysize=image.ysize; + cvReleaseImage( &rgba ); + cvReleaseImage( &rgb ); + cvReleaseImage( &grey ); + cvReleaseImage( &prev_grey ); + cvReleaseImage( &pyramid ); + cvReleaseImage( &prev_pyramid ); + rgba = cvCreateImage( cvSize(comp_xsize, comp_ysize), 8, 4 ); rgb = cvCreateImage( cvSize(comp_xsize, comp_ysize), 8, 3 ); grey = cvCreateImage( cvSize(comp_xsize, comp_ysize), 8, 1 ); @@ -238,13 +245,14 @@ void pix_opencv_lk :: processRGBAImage(imageStruct &image) // first marking if ( x_xmark[im] != -1.0 ) { - if ( ( abs( points[1][i].x - x_xmark[im] ) <= maxmove ) && ( abs( points[1][i].y - x_ymark[im] ) <= maxmove ) ) + // post( "pix_opencv_lk : compare (%f,%f) to (%d,%d)", points[1][i].x, points[1][i].y, x_xmark[im], x_ymark[im] ); + if ( ( abs( (int)points[1][i].x - x_xmark[im] ) <= maxmove ) && ( abs( (int)points[1][i].y - x_ymark[im] ) <= maxmove ) ) { char tindex[4]; sprintf( tindex, "%d", im+1 ); cvPutText( rgba, tindex, cvPointFrom32f(points[1][i]), &font, CV_RGB(255,255,255)); - x_xmark[im]=points[1][i].x; - x_ymark[im]=points[1][i].y; + x_xmark[im]=(int)points[1][i].x; + x_ymark[im]=(int)points[1][i].y; x_found[im]=ftolerance; marked=1; SETFLOAT(&x_list[0], im+1); @@ -359,6 +367,13 @@ void pix_opencv_lk :: processRGBImage(imageStruct &image) this->comp_xsize=image.xsize; this->comp_ysize=image.ysize; + cvReleaseImage( &rgba ); + cvReleaseImage( &rgb ); + cvReleaseImage( &grey ); + cvReleaseImage( &prev_grey ); + cvReleaseImage( &pyramid ); + cvReleaseImage( &prev_pyramid ); + rgba = cvCreateImage( cvSize(comp_xsize, comp_ysize), 8, 4 ); rgb = cvCreateImage( cvSize(comp_xsize, comp_ysize), 8, 3 ); grey = cvCreateImage( cvSize(comp_xsize, comp_ysize), 8, 1 ); @@ -614,6 +629,13 @@ void pix_opencv_lk :: processGrayImage(imageStruct &image) this->comp_xsize=image.xsize; this->comp_ysize=image.ysize; + cvReleaseImage( &rgba ); + cvReleaseImage( &rgb ); + cvReleaseImage( &grey ); + cvReleaseImage( &prev_grey ); + cvReleaseImage( &pyramid ); + cvReleaseImage( &prev_pyramid ); + rgba = cvCreateImage( cvSize(comp_xsize, comp_ysize), 8, 4 ); rgb = cvCreateImage( cvSize(comp_xsize, comp_ysize), 8, 3 ); grey = cvCreateImage( cvSize(comp_xsize, comp_ysize), 8, 1 ); @@ -992,17 +1014,17 @@ void pix_opencv_lk :: markMess(int argc, t_atom *argv) } else { - float fperx = argv[0].a_w.w_float; - float fpery = argv[1].a_w.w_float; + float fpx = argv[0].a_w.w_float; + float fpy = argv[1].a_w.w_float; int px, py; - if ( ( fperx < 0.0 ) || ( fperx > 1.0 ) || ( fpery < 0.0 ) || ( fpery > 1.0 ) ) + if ( ( fpx < 0.0 ) || ( fpx > comp_xsize ) || ( fpy < 0.0 ) || ( fpy > comp_ysize ) ) { return; } - px = (int)(fperx*comp_xsize); - py = (int)(fpery*comp_ysize); + px = (int)fpx; + py = comp_ysize-(int)fpy; inserted = 0; for ( i=0; i