#N canvas 1 49 1424 780 10; #X obj 41 -81 cnv 15 621 300 empty empty empty 20 12 0 14 -260097 -66577 0; #X obj 301 -30 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 301 -3 metro 40; #X msg 382 16 close; #X msg 378 -8 open /dev/video0; #X obj 321 95 pdp_v4l2; #X obj 44 328 cnv 15 621 360 empty empty empty 20 12 0 14 -258113 -66577 0; #X obj 91 703 pdp_xv; #X obj 44 244 cnv 15 621 73 empty empty empty 20 12 0 14 -260801 -66577 0; #X floatatom 243 280 5 0 0 0 - - -; #X text 281 279 threshold (default 13) to use when comparing pixel colors; #X msg 387 71 format \$1; #X obj 388 49 hradio 15 1 0 4 empty empty empty 0 -8 0 10 -262144 -1 -1 0; #X obj 93 280 pdp_opencv_threshold; #X text 46 -136 Play here with a simple pattern image loaded and play with zoom and rotation.; #X text 46 -111 Written by Yves Degoyon ( ydegoyon@gmail.com ); #X text 46 -162 The moments of contours should be constant ( Hu moments invariants ) when the shapes are zoomed or rotated.; #X obj 93 157 pdp_qt; #X obj 125 92 metro 40; #X msg 125 64 bang; #X msg 166 64 stop; #X obj 92 -5 openpanel; #X msg 92 20 open \$1; #X msg 92 -33 bang; #X msg 126 119 loop \$1; #X obj 206 119 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X obj 206 37 loadbang; #X text 143 -32 playing a video file; #X text 161 -19 ( try estrella.mov ); #N canvas 0 220 1415 776 extract_biggest_contour 0; #X obj 117 34 inlet; #X obj 127 518 outlet; #X floatatom 263 122 5 0 0 0 - - -; #X floatatom 335 135 5 0 0 0 - - -; #X obj 145 150 pdp_opencv_contours_boundingrect; #X text 301 120 minimal area in pixels to be detected (default 10x10) ; #X text 372 136 maximal area in pixels to be detected (default 320x240) ; #N canvas 63 323 605 502 smax 0; #X obj 37 368 route 1; #X obj 80 233 t f b; #X obj 127 258 f; #X obj 41 329 >; #X obj 94 282 f 0; #X obj 193 253 f; #X obj 209 290 outlet; #X msg 199 184 0; #X obj 220 130 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X obj 225 97 loadbang; #X obj 105 73 unpack f f f f f; #X obj 99 115 *; #X obj 88 143 f; #X obj 142 117 t b f; #X obj 132 25 inlet; #X obj 156 183 f; #X msg 172 384 bang; #X msg 200 212 bang; #X obj 119 319 f; #X obj 111 343 outlet; #X obj 204 154 metro 100; #X connect 0 0 16 0; #X connect 1 0 2 1; #X connect 1 0 3 0; #X connect 1 1 4 0; #X connect 2 0 4 1; #X connect 3 0 0 0; #X connect 4 0 3 1; #X connect 4 0 18 1; #X connect 5 0 6 0; #X connect 7 0 2 1; #X connect 7 0 4 1; #X connect 7 0 17 0; #X connect 8 0 20 0; #X connect 9 0 8 0; #X connect 10 0 13 0; #X connect 10 3 11 0; #X connect 10 4 11 1; #X connect 11 0 12 1; #X connect 12 0 1 0; #X connect 13 0 12 0; #X connect 13 1 15 1; #X connect 14 0 10 0; #X connect 15 0 5 1; #X connect 16 0 2 0; #X connect 16 0 15 0; #X connect 17 0 5 0; #X connect 17 0 18 0; #X connect 18 0 19 0; #X connect 20 0 7 0; #X restore 213 197 pd smax; #X floatatom 284 226 5 0 0 0 - - -; #X text 322 226 biggest contour number; #X obj 212 267 unpack f f f f; #X obj 133 420 pdp_cropper; #X obj 209 351 +; #X obj 253 351 +; #X obj 159 186 pdp_xv; #X text 219 421 crop biggest contour; #X obj 133 469 pdp_scale 320 240; #N canvas 418 122 450 300 sroute 0; #X obj 148 99 inlet; #X obj 90 54 list split 1; #X obj 90 31 inlet; #X obj 90 188 outlet; #X obj 90 124 select \$1; #X obj 90 154 list; #X connect 0 0 4 1; #X connect 1 0 4 0; #X connect 1 1 5 1; #X connect 2 0 1 0; #X connect 4 0 5 0; #X connect 5 0 3 0; #X restore 213 246 pd sroute; #X obj 222 322 expr $f1+8-($f1%8); #X obj 293 295 expr $f1+8-($f1%8); #X msg 227 46 nightmode 1; #X msg 240 74 draw 0; #X msg 259 98 show 1; #X obj 332 49 loadbang; #X connect 0 0 4 0; #X connect 2 0 4 1; #X connect 3 0 4 2; #X connect 4 0 11 0; #X connect 4 0 14 0; #X connect 4 1 7 0; #X connect 4 1 17 0; #X connect 7 1 8 0; #X connect 8 0 17 1; #X connect 10 0 12 0; #X connect 10 0 11 1; #X connect 10 1 13 0; #X connect 10 1 11 3; #X connect 10 2 18 0; #X connect 10 3 19 0; #X connect 11 0 16 0; #X connect 12 0 11 2; #X connect 13 0 11 4; #X connect 16 0 1 0; #X connect 17 0 10 0; #X connect 18 0 12 1; #X connect 19 0 13 1; #X connect 20 0 4 0; #X connect 21 0 4 0; #X connect 22 0 4 0; #X connect 23 0 20 0; #X connect 23 0 21 0; #X connect 23 0 22 0; #X restore 93 343 pd extract_biggest_contour; #X text 262 342 abstraction to extract biggest contour; #X obj 311 253 loadbang; #X msg 280 253 160; #X msg 137 440 binary \$1; #X obj 207 441 tgl 15 0 sbin empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 240 441 treat incoming frames as binary data; #X text 230 468 calculates hu moments invariants; #X obj 92 466 pdp_opencv_hu_moments; #X obj 224 508 unpack f f f f f f f; #X floatatom 234 535 30 0 0 0 - - h1; #X text 214 534 h1; #X floatatom 245 557 30 0 0 0 - - h2; #X floatatom 256 578 30 0 0 0 - - h3; #X floatatom 269 599 30 0 0 0 - - h4; #X floatatom 285 621 30 0 0 0 - - h5; #X floatatom 297 641 30 0 0 0 - - h6; #X floatatom 306 664 30 0 0 0 - - h7; #X text 225 556 h2; #X text 237 577 h3; #X text 250 598 h4; #X text 265 620 h5; #X text 277 640 h6; #X text 286 663 h7; #X floatatom 163 412 5 0 0 0 - - -; #X obj 92 410 pdp_rotate; #X text 211 410 <-- rotate the frames; #X floatatom 206 378 5 0 0 0 - - -; #X obj 92 376 pdp_zoom; #X text 244 376 <-- zoom the frames; #X obj 158 377 / 100; #X text 62 -63 INPUT : movie or camera; #X obj 684 -82 cnv 15 621 300 empty empty empty 20 12 0 14 -260097 -66577 0; #X obj 725 -3 openpanel; #X msg 706 -32 bang; #X obj 705 65 pdp_background; #X obj 705 142 pdp_imgloader; #X obj 705 42 metro 40; #X msg 724 21 load \$1 0 0; #X text 752 -33 loading a pattern image; #X obj 705 112 pdp_scale 320 240; #X obj 705 89 pdp_convert image/YCrCb/*; #X text 751 -20 ( try estrella.jpg ); #X obj 764 42 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 705 -64 Compare to a pattern; #X obj 686 242 cnv 15 621 73 empty empty empty 20 12 0 14 -260801 -66577 0; #X floatatom 856 278 5 0 0 0 - - -; #X text 894 277 threshold (default 13) to use when comparing pixel colors; #X obj 706 278 pdp_opencv_threshold; #X obj 924 251 loadbang; #X msg 893 251 160; #X obj 282 297 s trashh; #X obj 824 250 r trashh; #X obj 686 322 cnv 15 621 360 empty empty empty 20 12 0 14 -258113 -66577 0; #N canvas 0 325 1415 776 extract_biggest_contour 0; #X obj 117 34 inlet; #X obj 127 518 outlet; #X floatatom 263 122 5 0 0 0 - - -; #X floatatom 335 135 5 0 0 0 - - -; #X obj 145 150 pdp_opencv_contours_boundingrect; #X text 301 120 minimal area in pixels to be detected (default 10x10) ; #X text 372 136 maximal area in pixels to be detected (default 320x240) ; #N canvas 63 323 605 502 smax 0; #X obj 37 368 route 1; #X obj 80 233 t f b; #X obj 127 258 f; #X obj 41 329 >; #X obj 94 282 f 0; #X obj 193 253 f; #X obj 209 290 outlet; #X msg 199 184 0; #X obj 220 130 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X obj 225 97 loadbang; #X obj 105 73 unpack f f f f f; #X obj 99 115 *; #X obj 88 143 f; #X obj 142 117 t b f; #X obj 132 25 inlet; #X obj 156 183 f; #X msg 172 384 bang; #X msg 200 212 bang; #X obj 119 319 f; #X obj 111 343 outlet; #X obj 204 154 metro 100; #X connect 0 0 16 0; #X connect 1 0 2 1; #X connect 1 0 3 0; #X connect 1 1 4 0; #X connect 2 0 4 1; #X connect 3 0 0 0; #X connect 4 0 3 1; #X connect 4 0 18 1; #X connect 5 0 6 0; #X connect 7 0 2 1; #X connect 7 0 4 1; #X connect 7 0 17 0; #X connect 8 0 20 0; #X connect 9 0 8 0; #X connect 10 0 13 0; #X connect 10 3 11 0; #X connect 10 4 11 1; #X connect 11 0 12 1; #X connect 12 0 1 0; #X connect 13 0 12 0; #X connect 13 1 15 1; #X connect 14 0 10 0; #X connect 15 0 5 1; #X connect 16 0 2 0; #X connect 16 0 15 0; #X connect 17 0 5 0; #X connect 17 0 18 0; #X connect 18 0 19 0; #X connect 20 0 7 0; #X restore 213 197 pd smax; #X floatatom 284 226 5 0 0 0 - - -; #X text 322 226 biggest contour number; #X obj 212 267 unpack f f f f; #X obj 133 420 pdp_cropper; #X obj 209 351 +; #X obj 253 351 +; #X obj 159 186 pdp_xv; #X text 219 421 crop biggest contour; #X obj 133 469 pdp_scale 320 240; #N canvas 418 122 450 300 sroute 0; #X obj 148 99 inlet; #X obj 90 54 list split 1; #X obj 90 31 inlet; #X obj 90 188 outlet; #X obj 90 124 select \$1; #X obj 90 154 list; #X connect 0 0 4 1; #X connect 1 0 4 0; #X connect 1 1 5 1; #X connect 2 0 1 0; #X connect 4 0 5 0; #X connect 5 0 3 0; #X restore 213 246 pd sroute; #X obj 222 322 expr $f1+8-($f1%8); #X obj 293 295 expr $f1+8-($f1%8); #X msg 227 46 nightmode 1; #X msg 240 74 draw 0; #X msg 259 98 show 1; #X obj 332 49 loadbang; #X connect 0 0 4 0; #X connect 2 0 4 1; #X connect 3 0 4 2; #X connect 4 0 11 0; #X connect 4 0 14 0; #X connect 4 1 7 0; #X connect 4 1 17 0; #X connect 7 1 8 0; #X connect 8 0 17 1; #X connect 10 0 12 0; #X connect 10 0 11 1; #X connect 10 1 13 0; #X connect 10 1 11 3; #X connect 10 2 18 0; #X connect 10 3 19 0; #X connect 11 0 16 0; #X connect 12 0 11 2; #X connect 13 0 11 4; #X connect 16 0 1 0; #X connect 17 0 10 0; #X connect 18 0 12 1; #X connect 19 0 13 1; #X connect 20 0 4 0; #X connect 21 0 4 0; #X connect 22 0 4 0; #X connect 23 0 20 0; #X connect 23 0 21 0; #X connect 23 0 22 0; #X restore 708 337 pd extract_biggest_contour; #X text 877 336 abstraction to extract biggest contour; #X msg 752 434 binary \$1; #X obj 822 435 tgl 15 0 empty sbin empty 17 7 0 10 -262144 -1 -1 0 1; #X text 847 435 treat incoming frames as binary data; #X text 845 462 calculates hu moments invariants; #X obj 707 460 pdp_opencv_hu_moments; #X obj 839 502 unpack f f f f f f f; #X floatatom 849 529 30 0 0 0 - - -; #X text 829 528 h1; #X floatatom 860 551 30 0 0 0 - - -; #X floatatom 871 572 30 0 0 0 - - -; #X floatatom 884 593 30 0 0 0 - - -; #X floatatom 900 615 30 0 0 0 - - -; #X floatatom 912 635 30 0 0 0 - - -; #X floatatom 921 658 30 0 0 0 - - -; #X text 840 550 h2; #X text 852 571 h3; #X text 865 592 h4; #X text 880 614 h5; #X text 892 634 h6; #X text 901 657 h7; #X floatatom 778 406 5 0 0 0 - - -; #X obj 707 404 pdp_rotate; #X text 826 404 <-- rotate the frames; #X floatatom 821 372 5 0 0 0 - - -; #X obj 707 370 pdp_zoom; #X text 859 370 <-- zoom the frames; #X obj 773 371 / 100; #X obj 764 527 r h1; #X obj 800 527 -; #X obj 809 551 -; #X obj 820 574 -; #X obj 835 596 -; #X obj 851 618 -; #X obj 865 637 -; #X obj 872 657 -; #X obj 773 551 r h2; #X obj 784 574 r h3; #X obj 799 596 r h4; #X obj 815 617 r h5; #X obj 829 637 r h6; #X obj 836 657 r h7; #X obj 708 493 pdp_xv; #X floatatom 185 94 5 0 0 0 - - -; #X msg 140 157 224; #X text 46 -186 pdp_opencv_hu_moments :: Calculates the hu moments of contours.; #X connect 1 0 2 0; #X connect 2 0 5 0; #X connect 3 0 5 0; #X connect 4 0 5 0; #X connect 5 0 13 0; #X connect 9 0 13 2; #X connect 9 0 80 0; #X connect 11 0 5 0; #X connect 12 0 11 0; #X connect 13 0 29 0; #X connect 17 0 13 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 25 0 24 0; #X connect 26 0 25 0; #X connect 26 0 19 0; #X connect 29 0 57 0; #X connect 31 0 32 0; #X connect 32 0 9 0; #X connect 33 0 37 0; #X connect 34 0 33 0; #X connect 37 0 7 0; #X connect 37 1 38 0; #X connect 38 0 39 0; #X connect 38 1 41 0; #X connect 38 2 42 0; #X connect 38 3 43 0; #X connect 38 4 44 0; #X connect 38 5 45 0; #X connect 38 6 46 0; #X connect 53 0 54 1; #X connect 54 0 37 0; #X connect 56 0 59 0; #X connect 57 0 54 0; #X connect 59 0 57 1; #X connect 62 0 67 0; #X connect 63 0 62 0; #X connect 63 0 66 0; #X connect 64 0 70 0; #X connect 65 0 77 0; #X connect 66 0 64 0; #X connect 67 0 65 0; #X connect 69 0 65 0; #X connect 70 0 69 0; #X connect 72 0 66 0; #X connect 75 0 77 2; #X connect 77 0 83 0; #X connect 78 0 79 0; #X connect 79 0 75 0; #X connect 81 0 75 0; #X connect 83 0 109 0; #X connect 85 0 89 0; #X connect 86 0 85 0; #X connect 89 0 126 0; #X connect 89 1 90 0; #X connect 90 0 113 1; #X connect 90 1 114 1; #X connect 90 2 115 1; #X connect 90 3 116 1; #X connect 90 4 117 1; #X connect 90 5 118 1; #X connect 90 6 119 1; #X connect 105 0 106 1; #X connect 106 0 89 0; #X connect 108 0 111 0; #X connect 109 0 106 0; #X connect 111 0 109 1; #X connect 112 0 113 0; #X connect 113 0 91 0; #X connect 114 0 93 0; #X connect 115 0 94 0; #X connect 116 0 95 0; #X connect 117 0 96 0; #X connect 118 0 97 0; #X connect 119 0 98 0; #X connect 120 0 114 0; #X connect 121 0 115 0; #X connect 122 0 116 0; #X connect 123 0 117 0; #X connect 124 0 118 0; #X connect 125 0 119 0; #X connect 127 0 18 1; #X connect 128 0 17 1;