From 9ba3548adf6df82ce6569949e33983c97ecaa098 Mon Sep 17 00:00:00 2001 From: "N.N." Date: Mon, 1 Jun 2009 19:32:26 +0000 Subject: fixed help patches svn path=/trunk/externals/pdp_opencv/; revision=11611 --- pdp_opencv_edge-help.pd | 93 +++++++++----- pdp_opencv_floodfill-help.pd | 86 ++++++------- pdp_opencv_haarcascade-help.pd | 100 +++++++-------- pdp_opencv_histo-help.pd | 103 ++++++++++++---- pdp_opencv_histo.c | 129 ++++++++++---------- pdp_opencv_laplace-help.pd | 103 +++++++++++----- pdp_opencv_laplace.c | 48 +++----- pdp_opencv_lk-help.pd | 226 ++++++++++++++++++++-------------- pdp_opencv_morphology-help.pd | 140 ++++++++++++++------- pdp_opencv_morphology.c | 26 +--- pdp_opencv_motempl-help.pd | 268 ++++++++++++++++++++--------------------- pdp_opencv_motempl.c | 2 +- pdp_opencv_threshold-help.pd | 108 ++++++++++++++--- pdp_opencv_threshold.c | 35 ++---- 14 files changed, 860 insertions(+), 607 deletions(-) diff --git a/pdp_opencv_edge-help.pd b/pdp_opencv_edge-help.pd index 0ee2618..efee274 100644 --- a/pdp_opencv_edge-help.pd +++ b/pdp_opencv_edge-help.pd @@ -1,30 +1,65 @@ -#N canvas 0 0 521 599 10; -#X obj 101 158 pdp_xv; -#X obj 101 57 pdp_qt; -#X obj 134 -7 metro 40; -#X msg 134 -35 bang; -#X msg 175 -35 stop; -#X obj 101 -163 openpanel; -#X msg 101 -138 open \$1; -#X msg 101 -191 bang; -#X msg 135 20 loop \$1; -#X obj 215 20 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +#N canvas 534 143 786 603 10; +#X obj -195 -148 cnv 15 621 250 empty empty empty 20 12 0 14 -260097 +-66577 0; +#X obj 45 -108 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X floatatom 233 98 5 0 0 0 - - -; -#X obj 101 99 pdp_opencv_edge; -#X text 272 99 edge threshold; -#X obj 215 -62 loadbang; -#X text 170 -196 1 first load a video file; -#X connect 1 0 11 0; -#X connect 2 0 1 0; -#X connect 3 0 2 0; -#X connect 4 0 2 0; -#X connect 5 0 6 0; -#X connect 6 0 1 0; -#X connect 7 0 5 0; -#X connect 8 0 1 0; -#X connect 9 0 8 0; -#X connect 10 0 11 1; -#X connect 11 0 0 0; -#X connect 13 0 9 0; -#X connect 13 0 3 0; +#X obj 45 -81 metro 40; +#X msg 135 -54 close; +#X obj 65 17 pdp_v4l; +#X msg 122 -86 open /dev/video0; +#X obj 246 -106 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 +1 1; +#X obj 246 -79 metro 40; +#X msg 327 -60 close; +#X msg 323 -84 open /dev/video0; +#X obj 266 19 pdp_v4l2; +#X msg 332 -5 format \$1; +#X obj 333 -27 hradio 15 1 0 4 empty empty empty 0 -8 0 10 -262144 +-1 -1 0; +#X obj -165 67 pdp_qt; +#X obj -132 3 metro 40; +#X msg -132 -25 bang; +#X msg -91 -25 stop; +#X obj -165 -94 openpanel; +#X msg -165 -69 open \$1; +#X msg -165 -122 bang; +#X msg -131 30 loop \$1; +#X obj -51 30 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj -51 -52 loadbang; +#X text -122 -119 playing a video file; +#X text 75 -110 Camera input; +#X text -197 -169 written by lluis gomez i bigorda ( lluisgomez@hangar.org +); +#X text -196 -185 pdp_opencv_edge : edge detection filter; +#X obj -194 110 cnv 15 621 150 empty empty empty 20 12 0 14 -258113 +-66577 0; +#X obj -169 199 pdp_xv; +#X floatatom -52 121 5 0 0 0 - - -; +#X obj -169 156 pdp_opencv_edge; +#X text -13 122 edge threshold; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 4 0 30 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 30 0; +#X connect 11 0 10 0; +#X connect 12 0 11 0; +#X connect 13 0 30 0; +#X connect 14 0 13 0; +#X connect 15 0 14 0; +#X connect 16 0 14 0; +#X connect 17 0 18 0; +#X connect 18 0 13 0; +#X connect 19 0 17 0; +#X connect 20 0 13 0; +#X connect 21 0 20 0; +#X connect 22 0 21 0; +#X connect 22 0 15 0; +#X connect 29 0 30 1; +#X connect 30 0 28 0; diff --git a/pdp_opencv_floodfill-help.pd b/pdp_opencv_floodfill-help.pd index abc21df..31ddbb3 100644 --- a/pdp_opencv_floodfill-help.pd +++ b/pdp_opencv_floodfill-help.pd @@ -1,8 +1,6 @@ #N canvas 395 148 826 623 10; #X text -158 -39 used in tracking algorithms as an object selector ; -#X text -158 -26 Written by Lluis Gomez i Bigorda ( lluis@artefacte.org -); #X text -158 -12 and Yves Degoyon ( ydegoyon@gmail.com ); #X text -159 -62 pdp_opencv_floodfill : mark image components with a specific color; @@ -14,7 +12,7 @@ a specific color; #X msg 164 112 close; #X obj 94 183 pdp_v4l; #X msg 151 80 open /dev/video0; -#X obj 275 60 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +#X obj 275 60 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 275 87 metro 40; #X msg 356 106 close; @@ -76,47 +74,49 @@ you want to mark; #X text 168 405 set connectivity ( default 4 ); #X text 129 463 lower tolerance ( default 20 ); #X text 135 483 upper tolerance ( default 20 ); -#X connect 5 0 6 0; -#X connect 6 0 8 0; -#X connect 7 0 8 0; -#X connect 8 0 31 0; -#X connect 9 0 8 0; -#X connect 10 0 11 0; -#X connect 11 0 14 0; -#X connect 12 0 14 0; -#X connect 13 0 14 0; -#X connect 14 0 31 0; +#X text -158 -26 Written by Lluis Gomez i Bigorda ( lluisgomez@hangar.org +); +#X connect 4 0 5 0; +#X connect 5 0 7 0; +#X connect 6 0 7 0; +#X connect 7 0 30 0; +#X connect 8 0 7 0; +#X connect 9 0 10 0; +#X connect 10 0 13 0; +#X connect 11 0 13 0; +#X connect 12 0 13 0; +#X connect 13 0 30 0; +#X connect 14 0 13 0; #X connect 15 0 14 0; -#X connect 16 0 15 0; -#X connect 17 0 31 0; +#X connect 16 0 30 0; +#X connect 17 0 16 0; #X connect 18 0 17 0; -#X connect 19 0 18 0; -#X connect 20 0 18 0; -#X connect 21 0 22 0; -#X connect 22 0 17 0; -#X connect 23 0 21 0; -#X connect 24 0 17 0; +#X connect 19 0 17 0; +#X connect 20 0 21 0; +#X connect 21 0 16 0; +#X connect 22 0 20 0; +#X connect 23 0 16 0; +#X connect 24 0 23 0; #X connect 25 0 24 0; -#X connect 26 0 25 0; -#X connect 26 0 19 0; -#X connect 30 0 35 0; -#X connect 31 0 30 0; -#X connect 31 0 39 0; -#X connect 31 1 46 0; -#X connect 32 0 31 1; -#X connect 33 0 31 2; -#X connect 34 0 31 0; -#X connect 35 0 34 0; -#X connect 36 0 31 0; -#X connect 37 0 36 0; +#X connect 25 0 18 0; +#X connect 29 0 34 0; +#X connect 30 0 29 0; +#X connect 30 0 38 0; +#X connect 30 1 45 0; +#X connect 31 0 30 1; +#X connect 32 0 30 2; +#X connect 33 0 30 0; +#X connect 34 0 33 0; +#X connect 35 0 30 0; +#X connect 36 0 35 0; +#X connect 38 0 29 0; #X connect 39 0 30 0; -#X connect 40 0 31 0; -#X connect 46 0 51 0; -#X connect 51 0 47 0; -#X connect 51 1 48 0; -#X connect 51 2 49 0; -#X connect 51 3 50 0; -#X connect 56 0 31 0; -#X connect 57 0 31 0; -#X connect 61 0 31 0; -#X connect 62 0 31 0; +#X connect 45 0 50 0; +#X connect 50 0 46 0; +#X connect 50 1 47 0; +#X connect 50 2 48 0; +#X connect 50 3 49 0; +#X connect 55 0 30 0; +#X connect 56 0 30 0; +#X connect 60 0 30 0; +#X connect 61 0 30 0; diff --git a/pdp_opencv_haarcascade-help.pd b/pdp_opencv_haarcascade-help.pd index 089df39..4fc5ed1 100644 --- a/pdp_opencv_haarcascade-help.pd +++ b/pdp_opencv_haarcascade-help.pd @@ -1,6 +1,4 @@ -#N canvas 15 49 1247 801 10; -#X text -158 -9 Written by Lluis Gomez i Bigorda ( lluis@artefacte.org -); +#N canvas 25 49 1247 801 10; #X obj -158 12 cnv 15 621 250 empty empty empty 20 12 0 14 -260097 -66577 0; #X obj 82 52 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 @@ -9,7 +7,7 @@ #X msg 172 106 close; #X obj 102 177 pdp_v4l; #X msg 159 74 open /dev/video0; -#X obj 283 54 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +#X obj 283 54 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 283 81 metro 40; #X msg 364 100 close; @@ -82,53 +80,55 @@ on Haar's algorithm ( decision tree algorithm ); #X msg 54 388 scale_factor \$1; #X obj -68 228 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -262144 -1 -1 0 1; -#X connect 2 0 3 0; -#X connect 3 0 5 0; -#X connect 4 0 5 0; -#X connect 5 0 32 0; -#X connect 6 0 5 0; -#X connect 7 0 8 0; -#X connect 8 0 11 0; -#X connect 9 0 11 0; -#X connect 10 0 11 0; -#X connect 11 0 32 0; +#X text -158 -9 Written by Lluis Gomez i Bigorda ( lluisgomez@hangar.org +); +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 4 0 31 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 31 0; +#X connect 11 0 10 0; #X connect 12 0 11 0; -#X connect 13 0 12 0; -#X connect 14 0 32 0; +#X connect 13 0 31 0; +#X connect 14 0 13 0; #X connect 15 0 14 0; -#X connect 16 0 15 0; -#X connect 17 0 15 0; -#X connect 18 0 19 0; -#X connect 19 0 14 0; -#X connect 20 0 18 0; -#X connect 21 0 14 0; +#X connect 16 0 14 0; +#X connect 17 0 18 0; +#X connect 18 0 13 0; +#X connect 19 0 17 0; +#X connect 20 0 13 0; +#X connect 21 0 20 0; #X connect 22 0 21 0; -#X connect 23 0 22 0; -#X connect 23 0 16 0; -#X connect 31 0 34 0; -#X connect 31 1 38 0; -#X connect 31 2 58 0; -#X connect 32 0 27 0; -#X connect 32 1 41 0; -#X connect 32 2 31 0; -#X connect 34 0 28 0; -#X connect 34 1 29 0; -#X connect 34 2 30 0; -#X connect 38 0 35 0; -#X connect 38 1 36 0; -#X connect 38 2 37 0; -#X connect 43 0 32 0; +#X connect 22 0 15 0; +#X connect 30 0 33 0; +#X connect 30 1 37 0; +#X connect 30 2 57 0; +#X connect 31 0 26 0; +#X connect 31 1 40 0; +#X connect 31 2 30 0; +#X connect 33 0 27 0; +#X connect 33 1 28 0; +#X connect 33 2 29 0; +#X connect 37 0 34 0; +#X connect 37 1 35 0; +#X connect 37 2 36 0; +#X connect 42 0 31 0; +#X connect 43 0 42 0; #X connect 44 0 43 0; -#X connect 45 0 44 0; -#X connect 51 0 32 0; -#X connect 52 0 51 0; -#X connect 53 0 32 0; -#X connect 54 0 53 0; -#X connect 58 0 55 0; -#X connect 58 1 56 0; -#X connect 58 2 57 0; -#X connect 61 0 63 0; -#X connect 63 0 32 0; -#X connect 64 0 69 0; -#X connect 69 0 32 0; -#X connect 70 0 14 1; +#X connect 50 0 31 0; +#X connect 51 0 50 0; +#X connect 52 0 31 0; +#X connect 53 0 52 0; +#X connect 57 0 54 0; +#X connect 57 1 55 0; +#X connect 57 2 56 0; +#X connect 60 0 62 0; +#X connect 62 0 31 0; +#X connect 63 0 68 0; +#X connect 68 0 31 0; +#X connect 69 0 13 1; diff --git a/pdp_opencv_histo-help.pd b/pdp_opencv_histo-help.pd index 02b6251..53e1332 100644 --- a/pdp_opencv_histo-help.pd +++ b/pdp_opencv_histo-help.pd @@ -1,24 +1,81 @@ -#N canvas 0 6 1247 665 10; -#X obj -72 -110 metro 40; -#X obj -67 -131 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 -0 1; -#X obj -12 80 pdp_scale 320 240; -#X obj -12 350 pdp_xv; -#X msg 24 315 posdim 0 -23 320 240; -#X obj 82 241 pdp_xv; -#X obj 82 201 pdp_opencv_histo; -#X msg 60 -98 open /dev/video0; -#X obj -8 -63 pdp_v4l2; -#X floatatom 189 238 5 0 0 0 - - -; -#X obj 189 176 hradio 15 1 0 5 empty empty empty 0 -8 0 10 -262144 +#N canvas 77 86 757 669 10; +#X obj -147 -72 cnv 15 621 250 empty empty empty 20 12 0 14 -260097 +-66577 0; +#X obj 93 -32 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 93 -5 metro 40; +#X msg 183 22 close; +#X obj 113 93 pdp_v4l; +#X msg 170 -10 open /dev/video0; +#X obj 294 -30 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 294 -3 metro 40; +#X msg 375 16 close; +#X msg 371 -8 open /dev/video0; +#X obj 315 96 pdp_v4l2; +#X msg 380 71 format \$1; +#X obj 381 49 hradio 15 1 0 4 empty empty empty 0 -8 0 10 -262144 -1 +-1 0; +#X obj -117 143 pdp_qt; +#X obj -84 79 metro 40; +#X msg -84 51 bang; +#X msg -43 51 stop; +#X obj -117 -18 openpanel; +#X msg -117 7 open \$1; +#X msg -117 -46 bang; +#X msg -83 106 loop \$1; +#X obj -3 106 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj -3 24 loadbang; +#X text -74 -43 playing a video file; +#X text 123 -34 Camera input; +#X obj -57 144 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X text -148 -137 pdp_opencv_histo : image recognition using histograms +; +#X text -149 -124 record histograms of specific situations; +#X text -147 -112 the object will recognize the situations if they +occur again; +#X obj -146 186 cnv 15 621 300 empty empty empty 20 12 0 14 -258113 +-66577 0; +#X obj -118 208 pdp_scale 320 240; +#X obj -120 380 pdp_xv; +#X obj -66 340 pdp_xv; +#X obj -66 300 pdp_opencv_histo; +#X floatatom 41 337 5 0 0 0 - - -; +#X obj -12 262 hradio 15 1 0 5 empty empty empty 0 -8 0 10 -262144 -1 -1 0; -#X connect 0 0 8 0; -#X connect 1 0 0 0; -#X connect 2 0 3 0; -#X connect 2 0 6 0; -#X connect 4 0 3 0; -#X connect 6 0 5 0; -#X connect 6 1 9 0; -#X connect 7 0 8 0; -#X connect 8 0 2 0; -#X connect 10 0 6 1; +#X text -1 207 <- this scaling saves memmory; +#X text 71 261 save an histogram at position nth ( 0 <= n <= 80 ); +#X text 77 338 closest histogram; +#X text -147 -98 Written by Lluis Gomez i Bigorda ( lluisgomez@hangar.org +); +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 4 0 30 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 30 0; +#X connect 11 0 10 0; +#X connect 12 0 11 0; +#X connect 13 0 30 0; +#X connect 14 0 13 0; +#X connect 15 0 14 0; +#X connect 16 0 14 0; +#X connect 17 0 18 0; +#X connect 18 0 13 0; +#X connect 19 0 17 0; +#X connect 20 0 13 0; +#X connect 21 0 20 0; +#X connect 22 0 21 0; +#X connect 22 0 15 0; +#X connect 25 0 13 1; +#X connect 30 0 31 0; +#X connect 30 0 33 0; +#X connect 33 0 32 0; +#X connect 33 1 34 0; +#X connect 35 0 33 1; diff --git a/pdp_opencv_histo.c b/pdp_opencv_histo.c index 37b8cc2..7a7e590 100644 --- a/pdp_opencv_histo.c +++ b/pdp_opencv_histo.c @@ -53,6 +53,7 @@ typedef struct pdp_opencv_histo_struct int x_infosok; int save_now; + int nbsaved; CvHistogram *hist; CvHistogram *saved_hist[MAX_HISTOGRAMS_TO_COMPARE]; @@ -151,56 +152,55 @@ static void pdp_opencv_histo_process_rgb(t_pdp_opencv_histo *x) cvCvtColor( x->src, x->hsv, CV_BGR2HSV ); cvCvtPixToPlane( x->hsv, x->h_plane, x->s_plane, x->v_plane, 0 ); - // Build the histogram and compute its contents. - - - - if (x->save_now>=0) { + // Build the histogram and compute its contents. + if (x->save_now>=0) { fprintf(stderr,"saving histogram %d\n",x->save_now); cvCvtPixToPlane( x->hsv, x->h_saved_plane, x->s_saved_plane, x->v_saved_plane, 0 ); cvCalcHist( x->saved_planes, x->saved_hist[x->save_now], 0, 0 ); //Compute histogram cvNormalizeHist( x->saved_hist[x->save_now], 1.0 ); //Normalize it + x->nbsaved++; x->save_now=-1; - } - cvCalcHist( x->planes, x->hist, 0, 0 ); //Compute histogram - cvNormalizeHist( x->hist, 1.0 ); //Normalize it + } + cvCalcHist( x->planes, x->hist, 0, 0 ); //Compute histogram + cvNormalizeHist( x->hist, 1.0 ); //Normalize it - double tato[MAX_HISTOGRAMS_TO_COMPARE]; - int nearest = -1; - double max = 0; + double tato[MAX_HISTOGRAMS_TO_COMPARE]; + int nearest = -1; + double max = 0; - int n; - for (n=0; nhist, x->saved_hist[n], CV_COMP_INTERSECT); if (tato[n]>max) { max = tato[n]; nearest = n; } - } + } - outlet_float(x->x_outlet1, (float)nearest); - - // Create an image to use to visualize our histogram. + if ( x->nbsaved > 0 ) + outlet_float(x->x_outlet1, (float)nearest); + else + outlet_float(x->x_outlet1, -1.0); + + // Create an image to use to visualize our histogram. + int scale = 10; + //IplImage* hist_img = cvCreateImage( + // cvSize(x->x_width,x->x_height), + // 8, + // 3 + //); + //cvZero( hist_img ); + + // populate our visualization with little gray squares. - int scale = 10; - //IplImage* hist_img = cvCreateImage( - // cvSize(x->x_width,x->x_height), - // 8, - // 3 - //); - //cvZero( hist_img ); - - // populate our visualization with little gray squares. - - float max_value = 0; - cvGetMinMaxHistValue( x->hist, 0, &max_value, 0, 0 ); - - int h = 0; - int s = 0; + float max_value = 0; + cvGetMinMaxHistValue( x->hist, 0, &max_value, 0, 0 ); + int h = 0; + int s = 0; - for( h = 0; h < h_bins; h++ ) { - for( s = 0; s < s_bins; s++ ) { + for( h = 0; h < h_bins; h++ ) { + for( s = 0; s < s_bins; s++ ) { float bin_val = cvQueryHistValue_2D( x->hist, h, s ); int intensity = cvRound( bin_val * 255 / max_value ); cvRectangle( @@ -209,7 +209,7 @@ static void pdp_opencv_histo_process_rgb(t_pdp_opencv_histo *x) cvPoint( (h+1)*scale - 1, (s+1)*scale - 1), CV_RGB(intensity,intensity,intensity), CV_FILLED, 8 , 0 ); } - } + } //memory copy again, now from x->cedge->imageData to the new data pdp packet //memcpy( newdata, hist_img, x->x_size*3 ); @@ -288,15 +288,15 @@ static void pdp_opencv_histo_free(t_pdp_opencv_histo *x) pdp_packet_mark_unused(x->x_packet0); //cv_freeplugins(x); - //Destroy cv_images - cvReleaseImage(&x->src); - cvReleaseImage(&x->hsv); - cvReleaseImage(&x->h_plane); - cvReleaseImage(&x->s_plane); - cvReleaseImage(&x->v_plane); - cvReleaseImage(&x->h_saved_plane); - cvReleaseImage(&x->s_saved_plane); - cvReleaseImage(&x->v_saved_plane); + //Destroy cv_images + cvReleaseImage(&x->src); + cvReleaseImage(&x->hsv); + cvReleaseImage(&x->h_plane); + cvReleaseImage(&x->s_plane); + cvReleaseImage(&x->v_plane); + cvReleaseImage(&x->h_saved_plane); + cvReleaseImage(&x->s_saved_plane); + cvReleaseImage(&x->v_saved_plane); } t_class *pdp_opencv_histo_class; @@ -322,30 +322,28 @@ void *pdp_opencv_histo_new(t_floatarg f) x->x_infosok = 0; x->save_now = 0; + x->nbsaved = 0; - - - - x->src = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 3); - x->hsv = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 3 ); - - x->h_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); - x->s_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); - x->v_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); - x->planes[0] = x->h_plane; - x->planes[1] = x->s_plane; - cvCvtPixToPlane( x->hsv, x->h_plane, x->s_plane, x->v_plane, 0 ); - x->h_saved_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); - x->s_saved_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); - x->v_saved_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); - x->saved_planes[0] = x->h_saved_plane; - x->saved_planes[1] = x->s_saved_plane; - cvCvtPixToPlane( x->hsv, x->h_saved_plane, x->s_saved_plane, x->v_saved_plane, 0 ); + x->src = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 3); + x->hsv = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 3 ); + + x->h_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); + x->s_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); + x->v_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); + x->planes[0] = x->h_plane; + x->planes[1] = x->s_plane; + cvCvtPixToPlane( x->hsv, x->h_plane, x->s_plane, x->v_plane, 0 ); + x->h_saved_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); + x->s_saved_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); + x->v_saved_plane = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 1); + x->saved_planes[0] = x->h_saved_plane; + x->saved_planes[1] = x->s_saved_plane; + cvCvtPixToPlane( x->hsv, x->h_saved_plane, x->s_saved_plane, x->v_saved_plane, 0 ); cvCvtColor( x->src, x->hsv, CV_BGR2HSV ); - int h_bins = (int)(x->x_width/10), s_bins = (int)(x->x_height/10); - { + int h_bins = (int)(x->x_width/10), s_bins = (int)(x->x_height/10); + { int hist_size[] = { h_bins, s_bins }; float h_ranges[] = { 0, 180 }; // hue is [0,180] float s_ranges[] = { 0, 255 }; @@ -367,7 +365,7 @@ void *pdp_opencv_histo_new(t_floatarg f) 1 ); } - } + } return (void *)x; } @@ -389,7 +387,6 @@ void pdp_opencv_histo_setup(void) class_addmethod(pdp_opencv_histo_class, (t_method)pdp_opencv_histo_input_0, gensym("pdp"), A_SYMBOL, A_DEFFLOAT, A_NULL); class_addmethod(pdp_opencv_histo_class, (t_method)pdp_opencv_histo_save, gensym("save"), A_FLOAT, A_NULL ); - } #ifdef __cplusplus diff --git a/pdp_opencv_laplace-help.pd b/pdp_opencv_laplace-help.pd index b23e464..3c543b4 100644 --- a/pdp_opencv_laplace-help.pd +++ b/pdp_opencv_laplace-help.pd @@ -1,30 +1,75 @@ -#N canvas 626 25 521 599 10; -#X obj 101 158 pdp_xv; -#X obj 101 57 pdp_qt; -#X obj 134 -7 metro 40; -#X msg 134 -35 bang; -#X msg 175 -35 stop; -#X obj 101 -163 openpanel; -#X msg 101 -138 open \$1; -#X msg 101 -191 bang; -#X msg 135 20 loop \$1; -#X obj 215 20 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +#N canvas 310 159 693 598 10; +#X obj -110 -117 cnv 15 621 250 empty empty empty 20 12 0 14 -260097 +-66577 0; +#X obj 130 -77 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X floatatom 248 101 5 0 0 0 - - -; -#X obj 215 -62 loadbang; -#X text 170 -196 1 first load a video file; -#X obj 101 99 pdp_opencv_laplace; -#X text 287 102 aperture size (1 \, 3 \, 5 \, 7); -#X connect 1 0 13 0; -#X connect 2 0 1 0; -#X connect 3 0 2 0; -#X connect 4 0 2 0; -#X connect 5 0 6 0; -#X connect 6 0 1 0; -#X connect 7 0 5 0; -#X connect 8 0 1 0; -#X connect 9 0 8 0; -#X connect 10 0 13 1; -#X connect 11 0 9 0; -#X connect 11 0 3 0; -#X connect 13 0 0 0; +#X obj 130 -50 metro 40; +#X msg 220 -23 close; +#X obj 150 48 pdp_v4l; +#X msg 207 -55 open /dev/video0; +#X obj 319 -82 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 319 -55 metro 40; +#X msg 400 -36 close; +#X msg 396 -60 open /dev/video0; +#X obj 340 44 pdp_v4l2; +#X msg 405 19 format \$1; +#X obj 406 -3 hradio 15 1 0 4 empty empty empty 0 -8 0 10 -262144 -1 +-1 0; +#X obj -80 98 pdp_qt; +#X obj -47 34 metro 40; +#X msg -47 6 bang; +#X msg -6 6 stop; +#X obj -80 -63 openpanel; +#X msg -80 -38 open \$1; +#X msg -80 -91 bang; +#X msg -46 61 loop \$1; +#X obj 34 61 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1 +; +#X obj 34 -21 loadbang; +#X text -37 -88 playing a video file; +#X text 160 -79 Camera input; +#X obj -20 99 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X text -107 -148 Written by Lluis Gomez i Bigorda ( lluisgomez@hangar.org +); +#X text -107 -172 pdp_opencv_laplace : laplace filter; +#X text -107 -159 used as an edge detector; +#X obj -108 139 cnv 15 621 80 empty empty empty 20 12 0 14 -258113 +-66577 0; +#X obj -53 230 pdp_xv; +#X obj -53 171 pdp_opencv_laplace; +#X msg 97 146 1; +#X msg 131 146 3; +#X msg 164 146 5; +#X msg 196 146 7; +#X text 231 146 aperture size ( default 3 ); +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 4 0 31 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 31 0; +#X connect 11 0 10 0; +#X connect 12 0 11 0; +#X connect 13 0 31 0; +#X connect 14 0 13 0; +#X connect 15 0 14 0; +#X connect 16 0 14 0; +#X connect 17 0 18 0; +#X connect 18 0 13 0; +#X connect 19 0 17 0; +#X connect 20 0 13 0; +#X connect 21 0 20 0; +#X connect 22 0 21 0; +#X connect 22 0 15 0; +#X connect 25 0 13 1; +#X connect 31 0 30 0; +#X connect 32 0 31 1; +#X connect 33 0 31 1; +#X connect 34 0 31 1; +#X connect 35 0 31 1; diff --git a/pdp_opencv_laplace.c b/pdp_opencv_laplace.c index 8e0e121..688fe9e 100644 --- a/pdp_opencv_laplace.c +++ b/pdp_opencv_laplace.c @@ -31,8 +31,6 @@ #include "cv.h" #endif - - typedef struct pdp_opencv_laplace_struct { t_object x_obj; @@ -63,8 +61,6 @@ typedef struct pdp_opencv_laplace_struct } t_pdp_opencv_laplace; - - static void pdp_opencv_laplace_process_rgb(t_pdp_opencv_laplace *x) { t_pdp *header = pdp_packet_header(x->x_packet0); @@ -73,7 +69,6 @@ static void pdp_opencv_laplace_process_rgb(t_pdp_opencv_laplace *x) short int *newdata = (short int *)pdp_packet_data(x->x_packet1); int i; - if ((x->x_width != (t_int)header->info.image.width) || (x->x_height != (t_int)header->info.image.height)) { @@ -107,23 +102,19 @@ static void pdp_opencv_laplace_process_rgb(t_pdp_opencv_laplace *x) memcpy( newdata, data, x->x_size*3 ); - // FEM UNA COPIA DEL PACKET A x->grey->imageData ... http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html aqui veiem la estructura de IplImage memcpy( x->frame->imageData, data, x->x_size*3 ); - cvCvtPixToPlane( x->frame, x->planes[0], x->planes[1], x->planes[2], 0 ); - for( i = 0; i < 3; i++ ) - { - cvLaplace( x->planes[i], x->laplace, x->aperture_size ); - cvConvertScaleAbs( x->laplace, x->planes[i], 1, 0 ); - } - cvCvtPlaneToPix( x->planes[0], x->planes[1], x->planes[2], 0, x->colorlaplace ); - x->colorlaplace->origin = x->frame->origin; - - //cvShowImage("Laplacian", colorlaplace ); + cvCvtPixToPlane( x->frame, x->planes[0], x->planes[1], x->planes[2], 0 ); + for( i = 0; i < 3; i++ ) + { + cvLaplace( x->planes[i], x->laplace, x->aperture_size ); + cvConvertScaleAbs( x->laplace, x->planes[i], 1, 0 ); + } + cvCvtPlaneToPix( x->planes[0], x->planes[1], x->planes[2], 0, x->colorlaplace ); + x->colorlaplace->origin = x->frame->origin; memcpy( newdata, x->colorlaplace->imageData, x->x_size*3 ); - return; } @@ -131,7 +122,7 @@ static void pdp_opencv_laplace_process_rgb(t_pdp_opencv_laplace *x) static void pdp_opencv_laplace_thresh(t_pdp_opencv_laplace *x, t_floatarg f) { - if ((f==1)||(f==3)||(f==5)||(f==7)) x->aperture_size = (int)f; + if ((f==1)||(f==3)||(f==5)||(f==7)) x->aperture_size = (int)f; } static void pdp_opencv_laplace_sendpacket(t_pdp_opencv_laplace *x) @@ -148,13 +139,6 @@ static void pdp_opencv_laplace_process(t_pdp_opencv_laplace *x) { int encoding; t_pdp *header = 0; - char *parname; - unsigned pi; - int partype; - float pardefault; - t_atom plist[2]; - t_atom tlist[2]; - t_atom vlist[2]; /* check if image data packets are compatible */ if ( (header = pdp_packet_header(x->x_packet0)) @@ -197,14 +181,13 @@ static void pdp_opencv_laplace_free(t_pdp_opencv_laplace *x) pdp_queue_finish(x->x_queue_id); pdp_packet_mark_unused(x->x_packet0); - //cv_freeplugins(x); - //Destroy cv_images - for( i = 0; i < 3; i++ ) - cvReleaseImage( &x->planes[i] ); - cvReleaseImage( &x->frame ); - cvReleaseImage( &x->laplace ); - cvReleaseImage( &x->colorlaplace ); + //Destroy cv_images + for( i = 0; i < 3; i++ ) + cvReleaseImage( &x->planes[i] ); + cvReleaseImage( &x->frame ); + cvReleaseImage( &x->laplace ); + cvReleaseImage( &x->colorlaplace ); } t_class *pdp_opencv_laplace_class; @@ -230,7 +213,6 @@ void *pdp_opencv_laplace_new(t_floatarg f) x->x_infosok = 0; x->aperture_size = 3; - for( i = 0; i < 3; i++ ) x->planes[i] = cvCreateImage( cvSize(x->x_width, x->x_height), 8, 1 ); diff --git a/pdp_opencv_lk-help.pd b/pdp_opencv_lk-help.pd index 6ae1682..4bc5643 100644 --- a/pdp_opencv_lk-help.pd +++ b/pdp_opencv_lk-help.pd @@ -1,92 +1,142 @@ -#N canvas 479 193 718 599 10; -#X obj 109 285 pdp_xv; -#X msg 22 -157 open /dev/video0; -#X obj 96 -26 pdp_v4l2; -#X floatatom 230 99 5 0 0 0 - - -; -#X obj 109 242 pdp_opencv_lk; -#X obj 96 -74 metro 40; -#X msg 96 -105 bang; -#X msg 137 -106 stop; -#X text 265 98 window size; -#X obj 285 77 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +#N canvas 15 49 833 785 10; +#X text -14 -95 written by Lluis Gomez i Bigorda ( lluisgomez@hangar.org +) and Yves Degoyon ( ydegoyon@gmail.com ); +#X obj -17 -55 cnv 15 621 250 empty empty empty 20 12 0 14 -260097 +-66577 0; +#X obj 223 -15 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 223 12 metro 40; +#X msg 313 39 close; +#X obj 243 110 pdp_v4l; +#X msg 300 7 open /dev/video0; +#X obj 412 -20 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 412 7 metro 40; +#X msg 493 26 close; +#X msg 489 2 open /dev/video0; +#X obj 433 106 pdp_v4l2; +#X msg 498 81 format \$1; +#X obj 499 59 hradio 15 1 0 4 empty empty empty 0 -8 0 10 -262144 -1 +-1 0; +#X obj 13 160 pdp_qt; +#X obj 46 96 metro 40; +#X msg 46 68 bang; +#X msg 87 68 stop; +#X obj 13 -1 openpanel; +#X msg 13 24 open \$1; +#X msg 13 -29 bang; +#X msg 47 123 loop \$1; +#X obj 127 123 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X msg 200 75 nightmode \$1; -#X text 304 78 set nightmode; -#X text 107 370 pdp_opencv_lk : contour point marker using pyramid +#X obj 127 41 loadbang; +#X text 56 -26 playing a video file; +#X text 253 -17 Camera input; +#X obj 73 161 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X text -14 -120 pdp_opencv_lk : contour point detection using pyramid segmentation; -#X msg 195 49 quality \$1; -#X floatatom 270 50 5 0 0 0 - - -; -#X floatatom 278 25 5 0 0 0 - - -; -#X msg 181 24 mindistance \$1; -#X text 319 23 set distance ( default 10 ); -#X msg 174 -4 init; -#X text 212 -4 init point detections; -#X obj 265 -49 pdp_xv; -#X obj 264 -76 pdp_opencv_edge; -#X floatatom 373 -73 5 0 0 0 - - -; -#X text 410 -75 edge threshold; -#X floatatom 363 50 5 0 0 0 - - -; -#X obj 174 -27 t b; -#X obj 308 48 / 1000; -#X msg 160 285 cursor 1; -#X obj 109 311 route press; -#X msg 231 125 mark \$1 \$2; -#X msg 242 151 delete \$1; -#X text 107 395 written by Lluis Gomez i Bigorda ( lluisgomez@hangar.org -) and Yves Degoyon ( ydegoyon@gmail.com ); -#X text 313 151 delete a marker; -#X msg 253 177 clear; -#X text 301 178 delete all markers; -#X msg 260 204 maxmove \$1; -#X text 374 204 max movement of a marker ( default 5 pisels ); -#X floatatom 336 206 5 0 0 0 - - -; -#X text 495 49 set quality ( default 100 ); -#X msg 403 48 100; -#X obj 436 48 loadbang; -#X text 310 126 mark %x %y : mark a point to track ( max points : 10 +#X obj -15 203 cnv 15 621 400 empty empty empty 20 12 0 14 -258113 +-66577 0; +#X obj 38 628 pdp_xv; +#X floatatom 159 315 5 0 0 0 - - -; +#X obj 38 458 pdp_opencv_lk; +#X text 194 314 window size; +#X obj 214 293 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 129 291 nightmode \$1; +#X text 233 294 set nightmode; +#X msg 124 265 quality \$1; +#X floatatom 199 266 5 0 0 0 - - -; +#X floatatom 207 241 5 0 0 0 - - -; +#X msg 110 240 mindistance \$1; +#X text 248 239 set distance ( default 10 ); +#X msg 103 212 init; +#X text 172 212 init point detections; +#X obj 414 169 pdp_xv; +#X obj 314 169 pdp_opencv_edge; +#X floatatom 292 266 5 0 0 0 - - -; +#X obj 140 212 t b; +#X obj 237 264 / 1000; +#X msg 89 628 cursor 1; +#X obj 38 654 route press; +#X msg 160 341 mark \$1 \$2; +#X msg 171 367 delete \$1; +#X text 242 367 delete a marker; +#X msg 182 393 clear; +#X text 230 394 delete all markers; +#X msg 189 420 maxmove \$1; +#X text 303 420 max movement of a marker ( default 5 pisels ); +#X floatatom 265 422 5 0 0 0 - - -; +#X text 424 265 set quality ( default 100 ); +#X msg 332 264 100; +#X obj 365 264 loadbang; +#X text 239 342 mark %x %y : mark a point to track ( max points : 10 ); -#X obj 273 296 unpack f f; -#X floatatom 274 321 5 0 0 0 - - -; -#X floatatom 332 322 5 0 0 0 - - -; -#X text 275 337 X; -#X text 330 338 Y; -#X obj 272 270 route 1 2 3 4 5 6 7 8 9 10; -#X obj 380 -41 / 2; -#X connect 0 0 28 0; -#X connect 1 0 2 0; -#X connect 2 0 4 0; -#X connect 2 0 21 0; -#X connect 3 0 4 1; -#X connect 4 0 0 0; -#X connect 4 0 27 0; -#X connect 4 1 47 0; -#X connect 5 0 2 0; +#X obj 141 535 unpack f f; +#X floatatom 142 560 5 0 0 0 - - -; +#X floatatom 200 561 5 0 0 0 - - -; +#X text 143 576 X; +#X text 198 577 Y; +#X obj 140 509 route 1 2 3 4 5 6 7 8 9 10; +#X obj 285 169 / 2; +#X text 167 630 <-- mark the points you want to track in the video +window; +#X text 312 510 position of each marked point; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 5 0 31 0; +#X connect 5 0 44 0; #X connect 6 0 5 0; -#X connect 7 0 5 0; -#X connect 9 0 10 0; -#X connect 10 0 4 0; -#X connect 13 0 4 0; -#X connect 14 0 13 0; -#X connect 15 0 16 0; -#X connect 16 0 4 0; -#X connect 18 0 4 0; -#X connect 21 0 20 0; -#X connect 22 0 21 1; -#X connect 24 0 26 0; -#X connect 24 0 25 0; -#X connect 24 0 48 0; -#X connect 25 0 18 0; -#X connect 26 0 14 0; -#X connect 27 0 0 0; -#X connect 28 0 29 0; -#X connect 29 0 4 0; -#X connect 30 0 4 0; -#X connect 33 0 4 0; -#X connect 35 0 4 0; -#X connect 37 0 35 0; -#X connect 39 0 24 0; -#X connect 40 0 39 0; -#X connect 42 0 43 0; -#X connect 42 1 44 0; -#X connect 47 0 42 0; -#X connect 48 0 22 0; +#X connect 7 0 8 0; +#X connect 8 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 11 0; +#X connect 11 0 31 0; +#X connect 11 0 44 0; +#X connect 12 0 11 0; +#X connect 13 0 12 0; +#X connect 14 0 31 0; +#X connect 14 0 44 0; +#X connect 15 0 14 0; +#X connect 16 0 15 0; +#X connect 17 0 15 0; +#X connect 18 0 19 0; +#X connect 19 0 14 0; +#X connect 20 0 18 0; +#X connect 21 0 14 0; +#X connect 22 0 21 0; +#X connect 23 0 22 0; +#X connect 23 0 16 0; +#X connect 26 0 14 1; +#X connect 29 0 49 0; +#X connect 30 0 31 1; +#X connect 31 0 29 0; +#X connect 31 0 48 0; +#X connect 31 1 67 0; +#X connect 33 0 34 0; +#X connect 34 0 31 0; +#X connect 36 0 31 0; +#X connect 37 0 36 0; +#X connect 38 0 39 0; +#X connect 39 0 31 0; +#X connect 41 0 31 0; +#X connect 44 0 43 0; +#X connect 45 0 47 0; +#X connect 45 0 46 0; +#X connect 45 0 68 0; +#X connect 46 0 41 0; +#X connect 47 0 37 0; +#X connect 48 0 29 0; +#X connect 49 0 50 0; +#X connect 50 0 31 0; +#X connect 51 0 31 0; +#X connect 53 0 31 0; +#X connect 55 0 31 0; +#X connect 57 0 55 0; +#X connect 59 0 45 0; +#X connect 60 0 59 0; +#X connect 62 0 63 0; +#X connect 62 1 64 0; +#X connect 67 0 62 0; +#X connect 68 0 44 1; diff --git a/pdp_opencv_morphology-help.pd b/pdp_opencv_morphology-help.pd index 2bbe7bb..235ec2b 100644 --- a/pdp_opencv_morphology-help.pd +++ b/pdp_opencv_morphology-help.pd @@ -1,45 +1,99 @@ -#N canvas 575 65 668 599 10; -#X obj 101 158 pdp_xv; -#X obj 101 -2 pdp_qt; -#X obj 134 -66 metro 40; -#X msg 134 -94 bang; -#X msg 175 -94 stop; -#X obj 101 -163 openpanel; -#X msg 101 -138 open \$1; -#X msg 101 -191 bang; -#X msg 135 -39 loop \$1; -#X obj 215 -39 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +#N canvas 471 76 685 626 10; +#X obj -22 -6 cnv 15 621 250 empty empty empty 20 12 0 14 -260097 -66577 +0; +#X obj 218 34 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X floatatom 276 106 5 0 0 0 - - -; -#X obj 215 -121 loadbang; -#X text 170 -196 1 first load a video file; -#X obj 342 -2 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +#X obj 218 61 metro 40; +#X msg 308 88 close; +#X obj 238 159 pdp_v4l; +#X msg 295 56 open /dev/video0; +#X obj 407 29 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; -#X msg 263 43 shape 2; -#X msg 253 23 shape 1; -#X msg 273 62 shape 3; -#X msg 251 -2 mode \$1; -#X text 310 24 use rectangle structuring element; -#X text 328 59 use cross-shaped structuring element; -#X text 322 41 use elliptic structuring element; -#X obj 101 99 pdp_opencv_morphology; -#X text 361 -2 switch open/close and erode/dilate modes; -#X text 315 107 number of iterations -10/+10 (be carefull \; ); -#X connect 1 0 21 0; -#X connect 2 0 1 0; -#X connect 3 0 2 0; -#X connect 4 0 2 0; -#X connect 5 0 6 0; -#X connect 6 0 1 0; -#X connect 7 0 5 0; -#X connect 8 0 1 0; -#X connect 9 0 8 0; -#X connect 10 0 21 1; -#X connect 11 0 9 0; -#X connect 11 0 3 0; -#X connect 13 0 17 0; -#X connect 14 0 21 0; -#X connect 15 0 21 0; -#X connect 16 0 21 0; -#X connect 17 0 21 0; -#X connect 21 0 0 0; +#X obj 407 56 metro 40; +#X msg 488 75 close; +#X msg 484 51 open /dev/video0; +#X obj 428 155 pdp_v4l2; +#X msg 493 130 format \$1; +#X obj 494 108 hradio 15 1 0 4 empty empty empty 0 -8 0 10 -262144 +-1 -1 0; +#X obj 8 209 pdp_qt; +#X obj 41 145 metro 40; +#X msg 41 117 bang; +#X msg 82 117 stop; +#X obj 8 48 openpanel; +#X msg 8 73 open \$1; +#X msg 8 20 bang; +#X msg 42 172 loop \$1; +#X obj 122 172 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 122 90 loadbang; +#X text 51 23 playing a video file; +#X text 248 32 Camera input; +#X obj 68 210 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X text -20 -33 written by Lluis Gomez i Bigorda ( lluisgomez@hangar.org +); +#X text -19 -71 pdp_opencv_morphology : morphology filter ( erosion +/ dilatation ); +#X text -19 -46 used as a filter to focus on bright or dark zones; +#X obj -18 327 cnv 15 621 200 empty empty empty 20 12 0 14 -258113 +-66577 0; +#X obj 9 537 pdp_xv; +#X floatatom 184 471 5 0 0 0 - - -; +#X obj 218 363 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 172 421 shape 2; +#X msg 162 401 shape 1; +#X msg 182 440 shape 3; +#X msg 159 363 mode \$1; +#X text 219 402 use rectangle structuring element; +#X text 237 437 use cross-shaped structuring element; +#X text 231 419 use elliptic structuring element; +#X obj 9 464 pdp_opencv_morphology; +#X text 237 363 switch open/close and erode/dilate modes; +#X text 223 472 number of iterations -10/+10 be careful \, might freeze +your CPU ); +#X text 237 451 ( default rectangle ); +#X text 239 376 default open/close; +#X obj -21 248 cnv 15 621 73 empty empty empty 20 12 0 14 -260801 -66577 +0; +#X msg 161 271 set; +#X floatatom 161 295 5 0 0 0 - - -; +#X text 199 294 threshold (default 13) to use when comparing pixel +colors; +#X text 196 270 set the background reference; +#X obj 10 295 pdp_opencv_bgsubstract; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 4 0 50 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 50 0; +#X connect 11 0 10 0; +#X connect 12 0 11 0; +#X connect 13 0 50 0; +#X connect 14 0 13 0; +#X connect 15 0 14 0; +#X connect 16 0 14 0; +#X connect 17 0 18 0; +#X connect 18 0 13 0; +#X connect 19 0 17 0; +#X connect 20 0 13 0; +#X connect 21 0 20 0; +#X connect 22 0 21 0; +#X connect 22 0 15 0; +#X connect 25 0 13 1; +#X connect 31 0 40 1; +#X connect 32 0 36 0; +#X connect 33 0 40 0; +#X connect 34 0 40 0; +#X connect 35 0 40 0; +#X connect 36 0 40 0; +#X connect 40 0 30 0; +#X connect 46 0 50 0; +#X connect 47 0 50 1; +#X connect 50 0 40 0; diff --git a/pdp_opencv_morphology.c b/pdp_opencv_morphology.c index c86a95a..6e4b9bc 100644 --- a/pdp_opencv_morphology.c +++ b/pdp_opencv_morphology.c @@ -31,8 +31,6 @@ #include "cv.h" #endif - - typedef struct pdp_opencv_morphology_struct { t_object x_obj; @@ -59,14 +57,10 @@ typedef struct pdp_opencv_morphology_struct IplImage* dst; IplConvKernel* element; - - } t_pdp_opencv_morphology; - - // callback function for open/close trackbar void pdp_opencv_morphology_OpenClose(t_pdp_opencv_morphology *x, int pos) { @@ -84,7 +78,6 @@ void pdp_opencv_morphology_OpenClose(t_pdp_opencv_morphology *x, int pos) cvErode(x->dst,x->dst,x->element,1); } cvReleaseStructuringElement(&x->element); - //cvShowImage("Open/Close",dst); } // callback function for erode/dilate trackbar @@ -102,7 +95,6 @@ void pdp_opencv_morphology_ErodeDilate(t_pdp_opencv_morphology *x, int pos) cvDilate(x->src,x->dst,x->element,1); } cvReleaseStructuringElement(&x->element); - //cvShowImage("Erode/Dilate",dst); } @@ -146,12 +138,10 @@ static void pdp_opencv_morphology_process_rgb(t_pdp_opencv_morphology *x) // FEM UNA COPIA DEL PACKET A x->grey->imageData ... http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html aqui veiem la estructura de IplImage memcpy( x->src->imageData, data, x->x_size*3 ); - if (x->mode==1) pdp_opencv_morphology_OpenClose(x,x->pos); - else pdp_opencv_morphology_ErodeDilate(x,x->pos); - + if (x->mode==1) pdp_opencv_morphology_OpenClose(x,x->pos); + else pdp_opencv_morphology_ErodeDilate(x,x->pos); memcpy( newdata, x->dst->imageData, x->x_size*3 ); - return; } @@ -178,7 +168,7 @@ static void pdp_opencv_morphology_mode(t_pdp_opencv_morphology *x, t_floatarg f) static void pdp_opencv_morphology_pos(t_pdp_opencv_morphology *x, t_floatarg f) { - x->pos = (int)f; + x->pos = (int)f; } static void pdp_opencv_morphology_sendpacket(t_pdp_opencv_morphology *x) @@ -244,16 +234,14 @@ static void pdp_opencv_morphology_free(t_pdp_opencv_morphology *x) pdp_queue_finish(x->x_queue_id); pdp_packet_mark_unused(x->x_packet0); - //cv_freeplugins(x); - //Destroy cv_images - cvReleaseImage( &x->src ); - cvReleaseImage( &x->dst ); + //Destroy cv_images + cvReleaseImage( &x->src ); + cvReleaseImage( &x->dst ); } t_class *pdp_opencv_morphology_class; - void *pdp_opencv_morphology_new(t_floatarg f) { int i; @@ -278,12 +266,10 @@ void *pdp_opencv_morphology_new(t_floatarg f) x->mode = 0; x->element = 0; - x->src = cvCreateImage( cvSize(x->x_width,x->x_height), 8, 3 ); x->dst = cvCloneImage(x->src); - return (void *)x; } diff --git a/pdp_opencv_motempl-help.pd b/pdp_opencv_motempl-help.pd index a0af63d..6344607 100644 --- a/pdp_opencv_motempl-help.pd +++ b/pdp_opencv_motempl-help.pd @@ -1,140 +1,136 @@ -#N canvas 20 121 1247 665 10; -#X floatatom 485 286 5 0 0 0 - - -; -#X floatatom 583 247 5 0 0 0 - - -; -#X text 525 288 Threshold value. (default 30); -#X obj 492 373 route -1 0 1 2 3 4; -#X floatatom 495 453 5 0 0 0 - - -; -#X floatatom 530 453 5 0 0 0 - - -; -#X floatatom 567 453 5 0 0 0 - - -; -#X floatatom 601 453 5 0 0 0 - - -; -#X floatatom 524 502 5 0 0 0 - - -; -#X floatatom 559 502 5 0 0 0 - - -; -#X floatatom 596 502 5 0 0 0 - - -; -#X floatatom 630 502 5 0 0 0 - - -; -#X floatatom 568 558 5 0 0 0 - - -; -#X floatatom 603 558 5 0 0 0 - - -; -#X floatatom 640 558 5 0 0 0 - - -; -#X floatatom 674 558 5 0 0 0 - - -; -#X obj 492 424 unpack 0 0 0 0 0; -#X obj 521 473 unpack 0 0 0 0 0; -#X obj 565 529 unpack 0 0 0 0 0; -#X floatatom 638 452 5 0 0 0 - - -; -#X floatatom 668 502 5 0 0 0 - - -; -#X floatatom 712 558 5 0 0 0 - - -; -#X text 552 391 For each motion component component; -#X text 614 424 (-1) means the whole image; -#X text 689 450 Xcenter Ycenter Width Height Angle; -#X text 710 501 Xcenter Ycenter Width Height Angle; -#X text 757 557 Xcenter Ycenter Width Height Angle; -#X obj 360 329 pdp_opencv_motempl; -#X obj 364 374 pdp_xv; -#X msg 479 244 mhi_duration \$1; -#X obj 59 391 pdp_qt; -#X obj 56 41 metro 40; -#X msg 56 13 bang; -#X msg 97 13 stop; -#X msg 15 13 bang; -#X obj 140 41 openpanel; -#X msg 140 66 open \$1; -#X msg 140 13 bang; -#X msg 140 92 close; -#X floatatom 140 120 5 0 0 0 - - -; -#X floatatom 140 146 5 0 0 0 - - -; -#X msg 140 197 loop \$1; -#X obj 203 182 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 -1; -#X msg 142 341 dump array 0; -#X msg 142 291 stop; -#X msg 141 222 autoplay 1; -#X msg 142 267 play; -#X msg 142 315 cont; -#X floatatom 548 126 5 0 0 0 - - -; -#X msg 430 123 max_time_delta \$1; -#X floatatom 562 151 5 0 0 0 - - -; -#X msg 445 149 min_time_delta \$1; -#X floatatom 591 216 5 0 0 0 - - -; -#X msg 463 214 frame_buffer_num \$1; -#X floatatom 512 304 5 0 0 0 - - -; -#X floatatom 523 323 5 0 0 0 - - -; -#X text 563 325 Max size of the motion component (default 500); -#X text 553 304 Min size of the motion component (default 50); -#X text 586 125 Max time delta in seconds. (default 0.5); -#X text 600 151 Min time delta in seconds. (default 0.05); -#X obj 231 72 pdp_v4l2; -#X obj 231 45 metro 40; -#X msg 231 20 bang; -#X obj 303 43 metro 40; -#X msg 303 18 bang; -#X obj 303 70 pdp_v4l; -#X text 51 557 written by Lluis Gomez i Bigorda ( lluisgomez@hangar.org +#N canvas 1 49 1424 780 10; +#X text 22 30 written by Lluis Gomez i Bigorda ( lluisgomez@hangar.org ); -#X text 52 533 pdp_opencv_motempl : opencv motion detection based on -history; -#X text 632 216 Number of frames in the history buffer. (default 4) +#X text 23 6 pdp_opencv_motempl : opencv motion detection based on +movement history; +#X obj 11 63 cnv 15 621 250 empty empty empty 20 12 0 14 -260097 -66577 +0; +#X obj 251 103 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 251 130 metro 40; +#X msg 341 157 close; +#X obj 271 228 pdp_v4l; +#X msg 328 125 open /dev/video0; +#X obj 440 98 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 440 125 metro 40; +#X msg 521 144 close; +#X msg 517 120 open /dev/video0; +#X obj 461 224 pdp_v4l2; +#X msg 526 199 format \$1; +#X obj 527 177 hradio 15 1 0 4 empty empty empty 0 -8 0 10 -262144 +-1 -1 0; +#X obj 41 278 pdp_qt; +#X obj 74 214 metro 40; +#X msg 74 186 bang; +#X msg 115 186 stop; +#X obj 41 117 openpanel; +#X msg 41 142 open \$1; +#X msg 41 89 bang; +#X msg 75 241 loop \$1; +#X obj 155 241 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 155 159 loadbang; +#X text 84 92 playing a video file; +#X text 281 101 Camera input; +#X obj 101 279 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X obj 12 324 cnv 15 621 250 empty empty empty 20 12 0 14 -258113 -66577 +0; +#X floatatom 191 500 5 0 0 0 - - -; +#X floatatom 242 459 5 0 0 0 - - -; +#X text 231 502 Threshold value. (default 30); +#X obj 198 587 route -1 0 1 2 3 4; +#X floatatom 201 658 5 0 0 0 - - -; +#X floatatom 236 658 5 0 0 0 - - -; +#X floatatom 273 658 5 0 0 0 - - -; +#X floatatom 307 658 5 0 0 0 - - -; +#X floatatom 412 657 5 0 0 0 - - -; +#X floatatom 447 657 5 0 0 0 - - -; +#X floatatom 484 657 5 0 0 0 - - -; +#X floatatom 518 657 5 0 0 0 - - -; +#X obj 198 629 unpack 0 0 0 0 0; +#X obj 409 628 unpack 0 0 0 0 0; +#X floatatom 344 657 5 0 0 0 - - -; +#X floatatom 556 657 5 0 0 0 - - -; +#X text 198 610 (-1) means the whole image; +#X text 194 675 Xcenter Ycenter Width Height Angle; +#X text 409 673 Xcenter Ycenter Width Height Angle; +#X obj 62 555 pdp_opencv_motempl; +#X obj 62 672 pdp_xv; +#X msg 138 456 mhi_duration \$1; +#X floatatom 207 338 5 0 0 0 - - -; +#X msg 89 335 max_time_delta \$1; +#X floatatom 221 363 5 0 0 0 - - -; +#X msg 104 361 min_time_delta \$1; +#X floatatom 250 428 5 0 0 0 - - -; +#X msg 122 426 frame_buffer_num \$1; +#X floatatom 218 518 5 0 0 0 - - -; +#X floatatom 229 537 5 0 0 0 - - -; +#X text 269 539 Max size of the motion component (default 500); +#X text 259 518 Min size of the motion component (default 50); +#X text 245 337 Max time delta in seconds. (default 0.5); +#X text 259 363 Min time delta in seconds. (default 0.05); +#X text 291 428 Number of frames in the history buffer. (default 4) ; -#X text 625 248 Maximal duration of motion track in seconds. (default +#X text 284 460 Maximal duration of motion track in seconds. (default 1.0); -#X msg 456 180 aperture \$1; -#X text 653 177 aperture ( 3 \, 5 or 7 \, default 3 ); -#X msg 536 180 3; -#X msg 569 180 5; -#X msg 600 180 7; -#X connect 0 0 27 1; -#X connect 1 0 29 0; -#X connect 3 0 16 0; -#X connect 3 1 17 0; -#X connect 3 2 18 0; -#X connect 16 0 4 0; -#X connect 16 1 5 0; -#X connect 16 2 6 0; -#X connect 16 3 7 0; -#X connect 16 4 19 0; -#X connect 17 0 8 0; -#X connect 17 1 9 0; -#X connect 17 2 10 0; -#X connect 17 3 11 0; -#X connect 17 4 20 0; -#X connect 18 0 12 0; -#X connect 18 1 13 0; -#X connect 18 2 14 0; -#X connect 18 3 15 0; -#X connect 18 4 21 0; -#X connect 27 0 28 0; -#X connect 27 1 3 0; -#X connect 29 0 27 0; -#X connect 30 0 27 0; -#X connect 31 0 30 0; -#X connect 32 0 31 0; -#X connect 33 0 31 0; -#X connect 34 0 30 0; -#X connect 35 0 36 0; -#X connect 36 0 30 0; -#X connect 37 0 35 0; -#X connect 38 0 30 0; -#X connect 39 0 30 0; -#X connect 40 0 30 1; -#X connect 41 0 30 0; -#X connect 42 0 41 0; -#X connect 43 0 30 0; -#X connect 44 0 30 0; -#X connect 45 0 30 0; -#X connect 46 0 30 0; -#X connect 47 0 30 0; +#X msg 115 392 aperture \$1; +#X text 291 393 aperture ( 3 \, 5 or 7 \, default 3 ); +#X msg 195 392 3; +#X msg 228 392 5; +#X msg 259 392 7; +#X text 406 610 For each motion component; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 48 0; +#X connect 7 0 6 0; +#X connect 8 0 9 0; +#X connect 9 0 12 0; +#X connect 10 0 12 0; +#X connect 11 0 12 0; +#X connect 12 0 48 0; +#X connect 13 0 12 0; +#X connect 14 0 13 0; +#X connect 15 0 48 0; +#X connect 16 0 15 0; +#X connect 17 0 16 0; +#X connect 18 0 16 0; +#X connect 19 0 20 0; +#X connect 20 0 15 0; +#X connect 21 0 19 0; +#X connect 22 0 15 0; +#X connect 23 0 22 0; +#X connect 24 0 23 0; +#X connect 24 0 17 0; +#X connect 27 0 15 1; +#X connect 29 0 48 1; +#X connect 30 0 50 0; +#X connect 32 0 41 0; +#X connect 32 1 42 0; +#X connect 41 0 33 0; +#X connect 41 1 34 0; +#X connect 41 2 35 0; +#X connect 41 3 36 0; +#X connect 41 4 43 0; +#X connect 42 0 37 0; +#X connect 42 1 38 0; +#X connect 42 2 39 0; +#X connect 42 3 40 0; +#X connect 42 4 44 0; #X connect 48 0 49 0; -#X connect 49 0 27 0; -#X connect 50 0 51 0; -#X connect 51 0 27 0; -#X connect 52 0 53 0; -#X connect 53 0 27 0; -#X connect 54 0 27 2; -#X connect 55 0 27 3; -#X connect 60 0 27 0; -#X connect 61 0 60 0; -#X connect 62 0 61 0; -#X connect 63 0 65 0; -#X connect 64 0 63 0; -#X connect 65 0 27 0; -#X connect 70 0 27 0; -#X connect 72 0 70 0; -#X connect 73 0 70 0; -#X connect 74 0 70 0; +#X connect 48 1 32 0; +#X connect 50 0 48 0; +#X connect 51 0 52 0; +#X connect 52 0 48 0; +#X connect 53 0 54 0; +#X connect 54 0 48 0; +#X connect 55 0 56 0; +#X connect 56 0 48 0; +#X connect 57 0 48 2; +#X connect 58 0 48 3; +#X connect 65 0 48 0; +#X connect 67 0 65 0; +#X connect 68 0 65 0; +#X connect 69 0 65 0; diff --git a/pdp_opencv_motempl.c b/pdp_opencv_motempl.c index 00b95ac..e9989c0 100644 --- a/pdp_opencv_motempl.c +++ b/pdp_opencv_motempl.c @@ -206,7 +206,7 @@ void pdp_opencv_motempl_update_mhi( t_pdp_opencv_motempl *x, IplImage* img, Ipl SETFLOAT(&x->rlist[3], comp_rect.width); SETFLOAT(&x->rlist[4], comp_rect.height); SETFLOAT(&x->rlist[5], angle); - outlet_list( x->x_dataout, 0, 6, x->rlist ); + outlet_list( x->x_dataout, 0, 6, x->rlist ); } } diff --git a/pdp_opencv_threshold-help.pd b/pdp_opencv_threshold-help.pd index 0dfd360..7605121 100644 --- a/pdp_opencv_threshold-help.pd +++ b/pdp_opencv_threshold-help.pd @@ -1,19 +1,91 @@ -#N canvas 0 0 521 599 10; -#X obj 101 158 pdp_xv; -#X floatatom 256 100 5 0 0 0 - - -; -#X msg 101 -138 open /dev/video0; -#X obj 101 57 pdp_v4l2; -#X obj 101 99 pdp_opencv_threshold; -#X text 295 101 threshold value; -#X msg 186 61 mode \$1; -#X floatatom 255 61 5 0 0 0 - - -; -#X text 301 60 mode \, 0 \, 1 \, 2 \, 3 \, 4; -#X floatatom 257 80 5 0 0 0 - - -; -#X text 298 80 Max value used in some modes; -#X connect 1 0 4 2; -#X connect 2 0 3 0; +#N canvas 10 73 1039 729 10; +#X obj 11 -57 cnv 15 621 250 empty empty empty 20 12 0 14 -260097 -66577 +0; +#X obj 251 -17 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 251 10 metro 40; +#X msg 341 37 close; +#X obj 271 108 pdp_v4l; +#X msg 328 5 open /dev/video0; +#X obj 440 -22 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 440 5 metro 40; +#X msg 521 24 close; +#X msg 517 0 open /dev/video0; +#X obj 461 104 pdp_v4l2; +#X msg 526 79 format \$1; +#X obj 527 57 hradio 15 1 0 4 empty empty empty 0 -8 0 10 -262144 -1 +-1 0; +#X obj 41 158 pdp_qt; +#X obj 74 94 metro 40; +#X msg 74 66 bang; +#X msg 115 66 stop; +#X obj 41 -3 openpanel; +#X msg 41 22 open \$1; +#X msg 41 -31 bang; +#X msg 75 121 loop \$1; +#X obj 155 121 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 155 39 loadbang; +#X text 84 -28 playing a video file; +#X text 281 -19 Camera input; +#X obj 101 159 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X text 14 -122 pdp_opencv_threshold : pixel thresholding; +#X text 14 -97 written by Lluis Gomez i Bigorda ( lluisgomez@hangar.org +); +#X obj 12 201 cnv 15 621 150 empty empty empty 20 12 0 14 -258113 -66577 +0; +#X obj 58 396 pdp_xv; +#X floatatom 174 289 5 0 0 0 - - -; +#X obj 59 316 pdp_opencv_threshold; +#X msg 351 325 mode \$1; +#X floatatom 128 270 5 0 0 0 - - -; +#X text 128 253 Max value used in some modes; +#X msg 328 213 0; +#X msg 349 236 1; +#X msg 372 259 2; +#X msg 396 280 3; +#X msg 423 303 4; +#X text 171 273 threshold value; +#X text 207 290 ( default 50 ); +#X text 402 325 thresholding mode ( default 0 ); +#X text 13 -109 used as a filter to detect bright or dark piksels; +#X text 360 211 pixel >= threshold; +#X text 400 258 pixel >= threshold set to threshold; +#X text 378 235 pixel <= threshold; +#X text 427 279 pixel <= threshold set to 0; +#X text 451 301 pixel >= threshold set to 0; +#X connect 1 0 2 0; +#X connect 2 0 4 0; #X connect 3 0 4 0; -#X connect 4 0 0 0; -#X connect 6 0 4 0; -#X connect 7 0 6 0; -#X connect 9 0 4 1; +#X connect 4 0 31 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 31 0; +#X connect 11 0 10 0; +#X connect 12 0 11 0; +#X connect 13 0 31 0; +#X connect 14 0 13 0; +#X connect 15 0 14 0; +#X connect 16 0 14 0; +#X connect 17 0 18 0; +#X connect 18 0 13 0; +#X connect 19 0 17 0; +#X connect 20 0 13 0; +#X connect 21 0 20 0; +#X connect 22 0 21 0; +#X connect 22 0 15 0; +#X connect 25 0 13 1; +#X connect 30 0 31 2; +#X connect 31 0 29 0; +#X connect 32 0 31 0; +#X connect 33 0 31 1; +#X connect 35 0 32 0; +#X connect 36 0 32 0; +#X connect 37 0 32 0; +#X connect 38 0 32 0; +#X connect 39 0 32 0; diff --git a/pdp_opencv_threshold.c b/pdp_opencv_threshold.c index df65782..7773a4a 100644 --- a/pdp_opencv_threshold.c +++ b/pdp_opencv_threshold.c @@ -64,7 +64,6 @@ static void pdp_opencv_threshold_process_rgb(t_pdp_opencv_threshold *x) short int *data = (short int *)pdp_packet_data(x->x_packet0); t_pdp *newheader = pdp_packet_header(x->x_packet1); short int *newdata = (short int *)pdp_packet_data(x->x_packet1); - if ((x->x_width != (t_int)header->info.image.width) || (x->x_height != (t_int)header->info.image.height)) @@ -72,8 +71,6 @@ static void pdp_opencv_threshold_process_rgb(t_pdp_opencv_threshold *x) post("pdp_opencv_threshold :: resizing plugins"); - //cv_freeplugins(x); - x->x_width = header->info.image.width; x->x_height = header->info.image.height; x->x_size = x->x_width*x->x_height; @@ -86,11 +83,8 @@ static void pdp_opencv_threshold_process_rgb(t_pdp_opencv_threshold *x) x->image = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 3); // Create the output images with new sizes - x->gray = cvCreateImage(cvSize(x->image->width,x->image->height), IPL_DEPTH_8U, 1); - //load the plugins - //cv_loadplugins(x, FF_PLUGIN_DIR); } newheader->info.image.encoding = header->info.image.encoding; @@ -99,9 +93,6 @@ static void pdp_opencv_threshold_process_rgb(t_pdp_opencv_threshold *x) memcpy( newdata, data, x->x_size*3 ); - //cv_processframe(x, x->x_plugin, newdata); - - // FEM UNA COPIA DEL PACKET A image->imageData ... http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html aqui veiem la estructura de IplImage memcpy( x->image->imageData, data, x->x_size*3 ); // Convert to grayscale @@ -127,31 +118,24 @@ static void pdp_opencv_threshold_process_rgb(t_pdp_opencv_threshold *x) } cvCvtColor(x->gray, x->image, CV_GRAY2BGR); - //cvShowImage(wndname, cedge); memcpy( newdata, x->image->imageData, x->x_size*3 ); - return; } -static void pdp_opencv_threshold_param(t_pdp_opencv_threshold *x, t_floatarg f1, t_floatarg f2) -{ - -} - static void pdp_opencv_threshold_thresh(t_pdp_opencv_threshold *x, t_floatarg f) { - x->threshold_value = (int)f; + x->threshold_value = (int)f; } static void pdp_opencv_threshold_max(t_pdp_opencv_threshold *x, t_floatarg f) { - x->max_value = (int)f; + x->max_value = (int)f; } static void pdp_opencv_threshold_mode(t_pdp_opencv_threshold *x, t_floatarg f) { - x->threshold_mode = (int)f; + x->threshold_mode = (int)f; } static void pdp_opencv_threshold_sendpacket(t_pdp_opencv_threshold *x) @@ -219,14 +203,13 @@ static void pdp_opencv_threshold_free(t_pdp_opencv_threshold *x) pdp_packet_mark_unused(x->x_packet0); //cv_freeplugins(x); - //Destroy cv_images - cvReleaseImage(&x->image); - cvReleaseImage(&x->gray); + //Destroy cv_images + cvReleaseImage(&x->image); + cvReleaseImage(&x->gray); } t_class *pdp_opencv_threshold_class; - void *pdp_opencv_threshold_new(t_floatarg f) { int i; @@ -247,16 +230,12 @@ void *pdp_opencv_threshold_new(t_floatarg f) x->x_infosok = 0; - x->threshold_value = 1; + x->threshold_value = 50; x->max_value = 255; x->threshold_mode = 0; - - - x->image = cvCreateImage(cvSize(x->x_width,x->x_height), IPL_DEPTH_8U, 3); x->gray = cvCreateImage(cvSize(x->image->width,x->image->height), IPL_DEPTH_8U, 1); - cvCvtColor(x->image, x->gray, CV_BGR2GRAY); return (void *)x; } -- cgit v1.2.1