From a94fdbe0f0434d1cbc4e8c19c60c8137a45352f5 Mon Sep 17 00:00:00 2001 From: laurentBerger Date: Mon, 11 May 2015 13:13:20 +0200 Subject: [PATCH 1/5] Example about BLOB with a new image in data folder --- data/example_blob.bmp | Bin 0 -> 414518 bytes samples/cpp/exampleBLOB.cpp | 210 ++++++++++++++++++++++++++++++++++++ 2 files changed, 210 insertions(+) create mode 100644 data/example_blob.bmp create mode 100644 samples/cpp/exampleBLOB.cpp diff --git a/data/example_blob.bmp b/data/example_blob.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a974ef2c20a35c06ed06ccd08dd495cb096fa286 GIT binary patch literal 414518 zcmeI5y^iF_vY4sH;vQjV&Vqfc#sC5uJx-f#U7L_~uc5op$`R%`1&kwL#@m*+Mm+Kv=?&5a(tFpzY4`RBX@GQsbcXZ>=>q8;gzO+aLK+~QAe|w-LApSC z?>hLudw+y9KsrG>LwbXBf%M)D9f;XILK^=&K{`WvgLHxPKHu8oBfJifPLR%!-XL8d zz0bEjJi_Y$=>+Kv=?&5a()+BE(<8hNkWP@!klr9&AidA(IzPhe0O&9Uz?`oguwJx3ufa@CdI1q!Xkwq&G+xNbj>r zPml0AKsrG>LwbXBf%HC`8wNR_2S_JKXGm|5E|A`56y6@;b%1n&bcXZ>=>q9}#^mw{ zuLGnLq%)*9NEb-&6GG?rM|d3|ogkedy+OJ_dhaf9|CjC&(g5iM=?v)&()i!|jMn2L zybh2~kj{|aAYCB6&)5x*@H#*`K{`WvgLHxPJ|lU0gx3Mm3DOzT8>9=Q_ZipoBfJif zPLR%!-XL8dz0WAWJ;Lh%=>+Kv=?&5a()*10{|)M$p}(&C z`}BYJ_rH&4kl?>D3;y{7T=T&iFlk_9h50aPhVw=ZFdxhTrUB*y(+-z0AIt!z0p%mAhV<^$6XmoXpA0Hy)v1Je$dF(1qTrUB*y(+-z0AIt!z0p%mAhV z<^$6XmoXpA0Hy)v1Je$dF(1qTrUB*y(+-z0AIt!z0p%mAhV<^$6XmoXpA z0Hy)v1Je$d-3lKMFOkQCk%ha+USE1+x9w!!3LnviyffPDIhGGIcE+))%w#^U1TY^) zKA8{Z!wAMTllfpim=8h}!Sjm|6ZRkMKa61T{31IQ_8&$}*nhD9FoMDUgZ&2v2J^vu zFds4l*j4fPo(*5ItFWKncdEzCCmr&fw9AUFdxhZ!CxEa zmp*!axwC%2PmsyG3TElBGWH*$|LFVv0gf?n^tKJ!VC)e(hW=Mx(E5ReVGLlcn2$hH z#54m~?xG)9F$sWKI;@QOFzLC~yf6l^R?J7MESTiREFD(He37tBX~tCbre2@+B#%ttxv zLYUM^qf`rrw^HI)v`A3pWo8*G| z$ZxfBBP2mW>V)|yXTAI*Nv2J5!F=SmTDcLDAR%?ae3Y|Z{*ffpCb?if@>{Lk2uYBT zI$=Jp)_b15dOQATOFnas->ZZt^5!q$<`_mYZITP-<7y}Q`}^Y;smHHsM;meZR`&X} z?A2<~T^l-BJ5P4Pd>Hvy^c(F=?2k?w%p0Axh@I}0`CvXUnwSsfgZUshZaMx~RL1iQ zXyOlxHl){{pwvWF?31)45q1&%{RZa4s9v65u8cDu%m?P~m=ETI`7knoW%B&8*ZhK6 zrJge8gZaQ{WImV=<^u~nm=ETI`M?;!%6NWZ|G|8)|G*f)%GiIf|6o4Ye_#w?W$ZuL ze=r~HKQIQcvRm;V-Sot0#6K1#Mf5l|wRGD|_Ra9ojK{VJ?=A*R6+ZvDgXv{VJ?=A*R6+ZvDgXv54$C^lx)6Z`O%u^EaN2Vl=(=cNLn}j0)_ZmGa$?d&9I4TiCAps6$8S2B(glI z8+~$_A*mM-=7VI|G?i?4yu6tII#HTYqk3UJqSWWrxZh?J?aZsA?qT{X-_Oqv*%v>| zho5C)YTMn1mjjV8OYpZHv3p`ZFzuu*)0~EwK^{t@EUOP;KFEfNt*CB{iFCZY5Ungb zkGYGSE`<4rH9NVz_Qsb0p+%@BJiI0+vb5KV%m+Qpc>2vO>HY5 z;e@C_DA#T|lm_x;rU-=jaNA|9A@C7O2>SLneFD=zJls7$tb6Fa41{t;TOZSIR;a~% z2+BZCB|gH|x_f&i4@XLkX?#G2Z~q3Xua=hjGR{O8U1K+S0@T~$ zkzG*mZE6h>KD4@ZW)NJ5z)L70 zc0Ndi(D4X;TgJY}EXHk}k9#EO5U>zVzgjebXJdT03BmACK3NNNA1}E0!KID!@mVlD z`833b;Cwg&RmA2B9nM`a+w?8(p9JHeHEf!XPh=$Iim#tEJ-9L)eBds`W>mPN27e)Zx)U`BLfn{2evr|c30m1 z3kl}e8K(8wviv`9*P{Q3ghFgi1*9AwxVITy{`FA&&XS$@wLw0j*0mxW<2ezK7(Q@| ztMf~5b{unV#)XQ7tM>RvipOui(Sp<%KIC{oGr#Hwv^ufkl^Pwz-^`_}_+L~W7%q}A$ z?vMMU_`tr|q?;V`HtFr}>ai_8gh?Ugse6$d#|IXHXn>eq$DFHGc9}Q2yeU2+9{9j< zaz1ky$w!YFU5-Go<%?-HiY5T>pd~)C1gA4Nt`Ien55uQw0x_FcfIk}~CA^~m+Z$69|(vb_UR4AUbE)U*n~eDw3etR8%oGnDT^B7BcuEH?Kg)50Y2bx zA%YpES4}NmgV`O9<61lOr?vVGG{i@eXFhCkh{J)*e7FG7)hp&;1Yl(%NX556+TkOs z`}plQ(USW4l@Est(c8&6qNT&mnGac`!qt=Qt)C_z-ve3sKnW3~HJxHR8$?`~50hf2 zyo}N5NEp5cBJhDsGFI8=0wM!gHI6@QI?g=3I3iS$54#Jo$v)@znBj?KyneCi_~{jn zG*gMW7xZ&}nGc%_vB^H?CzxK;hl%t7`{_>yrTfc4&BUi89?M}iaAYnz!6#_}3TgQ2-W-)ok}hjBM#t!_L)4Noh?!&8ZlvBLy} zw8F=yg$v=;VB?r9Yz1TDL!V`gSge^e1khUYM>T8D^NC^p!g*5K8!ubo*Ql1#K8wOq*Ot9mZp{te^^m%4A%~^(Bek;5b!`43G^FFvp7CryA0Jd6dG*j z%6jOfiDeqWYj%MF^d4M-Zsm>e@l^%n+qZeHQM|}v>Y&$1K0bWd)M`HKT{LLrrn$kp z7sdUUWwYcq!iSE>m@^?F6A}c*wNZ9Hyk`dETi-AG0OaK0#R7sQyJQK{SO6=>*Yv@ILU+pQiKm>c{+Irbm6P6K6=6Ow9}*Wp~b0zfE3~b zVv6Y@z!!K5@ETvBAtzLtpBfw+^a1`uCCn7m*zy{QPd|N~4zvG&T*ZZi0fKx>o3K9y z`|LI)yYo>GA{U}886Apyczcbu_^?BgVv2dPtLev&AIHyG9EZKVvt)VH$7tZV%$V@B zmEV`T|NQy$>_Tjaj2=XYLP9(U_W9gLI2?4u_z&QxkE6ie+Q}wXp%MQv@-ZI^CHhn& z@e%S>2<-Fykq;*!n4;Zfb_++9M7fVv{73is>FMe7lf;Ndh~z;690+1Um|vy?cOggz z?jqk$RjAOoN5*P2;y*gT<9bYt%w9w#MDig1fFOEW_`qEV(t*2(YH!baF^d-vx)nY? zEqK7IoscL%kmYT+@qrQIfB=3S$n%EBtGnM zD#nNK>p;t{hg98v*-9ZK7LQi>n4O4$5D^g183qYYWj?GfL^8N^A#Y)rK2gmQen>I| zU9>X4bm9av`;u{*83~c2kZ?dS{fYC7Jy5mvV3<3!H#Wr^c-GOzu*rwyBYZqZ9&rmR zRpw9QVV-1EK(^0fd^`vieyIKf5HYP}RGF{W20Zld#(LV`SRFRs*J6> zShh@yy27&WCqNWNt}a9cWZNh600f&}41AafG2fX*kxCR|Q=&)ym53e=vm^nzcK>0y zEf0AE#6g-Yd`Moz1W4cvgACmn`Opb5c45_{Y{cmJ!}KVkQ6R6(cKBEwh~`7o7$j() z9rH4>3?RSjlAAEl-?ae7{|nc6-Sn`jpiY9~}mWyom91ATIae z@*e=n7^mt=?l%@pXVM;sqpsRsVoM)6QBG5Qs39uMH%pYN&oDj?#1Vbq@#(UriRGh{ z7OW}`+I1oT9No0V$35;rgc(L~Anphi-CCa%=$v0hNDThN5mYF11Rku&gh;N(VdRKn zIv?=p0^tyEB0?-%)BAf{kQ(DaY@==YBtAZF^_Me0K72gLGD7B8Iv=$8E;}DOA=fEJ z0mLIhbp@wjf>1tsQ6Kub<^&u(Z9UMe5f4vee02BYA^Q+BALCbIt|5qHf^p9-<@o5R zE+pRav>saHV+KUt2r&b)@qs_f?p(W!iVXE1jzz1<3piZP)rCk~YbH~V4>Q`IW;C@h z<~7I11jwIE9z>g97XN|sVN{EnnTZc|7`Ue40hAcpu35sjt=8{wu7zGF?eSrlVr&j% zS>j?7jB{x_sWX@lG@vjz0Wuy4AZj04l;c52gM3&432`7aJi_M}bb>KVFW?xchk>ri z@cK52ttNq!X8DkURKbBrdmv5+LRh-Q`42SS)a~Q517i7MQ)3qf67|7NIW6)rI}mBB zYysq}__XpCq1q-GDjwa3KmKvqCPiLN3Pv1=ZZvc@(*26wLDw1aKqe!j%v)xYd~|b= zDy(8=KCBarg%9H70@?yT2!L#A70!Cyu5*sEc?wOeRc&1e!(2}-cmxB|C?6vre-b^& z2FNzSZ2rTzf*~zzuWBFpa1)}NYs|4Y1w&9^HLi^hE%LOC1?>&PnZ=cJTjgW&AWjFe z#2+R;DBEJIu4X=5E@Z7PpP0=q*BP(8-3M5GBGmJbDx&3_0H z$hw1S;Da1`Od7lL;cy|Ua_4J(Juz8Oe?yx&vY1=Ro)NJOHP97xN2NY4vx4n*W*nP3z?el=PW z$rSmp&oZVC5UYy@gOA2z+{XllV}jCx6_dDXUekPt9%Sa@>9e@PwahQCp3VbwCh=hf zL{;v1jamI#Kc0-M-$19Auq8~}e83#DOfhEvv3vw0`j01*869~tAGR>W&OX92U4ypm3r?^&gbXM@DWDMgFo@^OYM+mV zkO>fZhiuybx%!V+zg5eoJ=K4h3EAqeXM%YQr?$NjL)8RXV!X2o=s39rKHwH%nnC#( z7r3vV{o{^BdnP{gS!Ss%yy9lXf)l)DNa=z307C9ZLS+9Tehnr94luWw50wysi|c70 zV#i!Kv>- zJ$?FgAC1N&wv`Xbh3I#PhNq&gN}TKBxpQvHf4FZqvrW}-y zl@NXKn&y{~@D%xdOZC=h-HU!wS68z+4nD47h<VkEWX|?Lf>A3($;b zke~gBK`DAxI3M^kUErMDAKLqQBH|%SV6x35=H5s*<5P+GAZaU-5A`{*DI&ihejnFy`6Us!D|?+Joi#C`rIS#!^eRzA0!iMd>CB_sVlq^ zYE~l|A(`|LmHEK!buIn)FaL7g0TEx+U3OAej!Kdn2(dk>jYEj7nEBXrft&#!CPEZI zkPhfYMF1g-!+elbHSu9^Au=GOt{jz$;PHa4d_)PE4^bP|^O+Bq3$ZpQ7xbjrA-)nh z0AW5zwp;ix5wfjiNL^u-$~X_eD*+$f^nhB#KV%<tzZ)V(<2r+KYS`!jP*AiM(Ty_i*fNm~qf@nU6?YDa|E5tS&@p^EH&;YHGdgLOT5L!O-p{c}_Vc^3MhL~EC^HAFg^FfbRq!rRXpkqEr1~l=ZyAV=W zwo0gFg?KUrA2u2EeC9*fi6O_#hf0W{Avp_Qylmf#Gk+Tog-a`>yAR~~b@H7Zp`wis zd6J3Igkw`<>pFq|*gA8bvHx(YXslr6LvkUct}K-b@*xB>7Gbt*=3~EEetf~RaC@LIsYbI;Nttb=F*G9M&8 zjeIx&fu#(oD@!GZR}foC7RN98PW<}Bou~7FL75Lx^Vai;4<{kk=7fSCHMF#2fmap# zncc6tHCt=jSoD16gQTm451bHE zSGGz@q_7!zJX0E>b+?u>RZ1VUOXh>5r;QKHg^;?kRq8jpYG>M-lmv*@$~H8T&wL=t z*@^@{5Eru54>?0@u6Ku2Ug%2TJvjc*HE+z3_^`$y#-{Yl#jx6|$2uVF^1^t!eL&5_lnF?;7Dgw&KN(i;LhUyjMV{shoYeRrI__z|%klm@Gmg7V5 z9wQ~~0OI6h3RI~|Z>U}|J`8v?1c;lD(SC)JswoK+Dr$q({2<2kPIdZDLnU7SOH1(qpp=VP!_ zv6T#MDC>YyX6Ivr06RON=G(Ys=A#We?ImSyJ_gKdY-Ph<_s`?v8pzEDVf8Xn!Ydfu zOuLol=3{da_}Oj>;DJ#MWaeYQsn|*fR7x(~O9PqtAWknl!R%#!*SMMa*c^oG%q1w7 z@1lXcd<-rsw(?<@+vhq}a>b!mCqfWcjB2`vCJi-qSKx!dEmLn@4+vGtxlLh0eDm1`+RAGi{g~-XrK=B$| zouOJK9aylOe0YT)9Dr0wVNO0a*FZZfqoDb(u|3?xk@&~f4F)(KAJgwv-^xD*i>A%W z$j3nQ8e6TjcV_GDR?wL4!*-L&@@wK_NOo6PN6ZJN9knbYAD-c9sQ{JvP#M6knUAJ< z!AzT^EF&LVU_m`ga!0OCn&v?j-gUFl<;;hw@}{n%?eFR!A0GqNYi#ufm$WI$o3g)4 z*c1vu`(Qp?CaAg`wQY*Re0+E>UkWW?sZ*+M!J_h=%veg`-@5kLitVybB z@4ns08q7yk_VyJf()#Y^%!jW@s;cicaAb{ad<1NNl-U5O%D%C}L|Wh7ocV|~(XQ>? z29B(ejgKwp^f`;X8%pzC?U{OT$_+==VLnoutZ08xwx={^K8o5i^&;_imhx~Tnf z4@SA+s5;C?ZWCthKg#x$#>_`n`{nMOV&bSe%tvk$X6--9_LRoVM^^jg?wn%cs5;C? zZWCthKg#x$#+mpS{8lYn?SUe6RGqB$D&2XMCMb=WkJ2VhIv&NuQFWM)r1mP^S(NQ5 zjgQAie@h3GvQ$48X94%e9ZIGoA7Za5PkfgkS|`GDU`KS!_3d>ows{Qj8_Tt7!I zWj>Bh0Dk|>2dt72eoz%tvDeD=aSaQCQ)P z4aa;mX0XEIG9QH%-q>)=M`H#nEH3j=SmBKg$9yzqu)^XpAB7d(*l^58V+JcMF7r`X z;f)Q)d^BdT!s0R?g%#e|aLh+z1}iKs^HEsgjSa_qG-j~E;xZqF72eoz%tvDeD=aSa zQCQ)P4VQ@z{{CEJ9N5HVK5Uxd{80nU2XlaFfce0*!)43|Gk|Fz6CZ=`*P@pC112n& z71sdsQC#Is4aj^nWv=4FG9SfN-qe81M^ol1E-dp=T;)v-n2C>WS&#U>Hl@4+2+MpN zz{nA|$b3X7?*L7ij{_Jv;ue{Y2<081Df4jvBS+jK^AVxE12oOWN8kfwKO8{iP2D2% z(UiH03(I^IS9wzd=Hg@U-8h}=4^1iW0KzgK2QYHPE#~5*3-cclcfw6`Xn^_1q1D^z zllizETjsbE<|BtzZ>LY@<92MB<4&^i5wwBI+ow5f9MdQB5u?4^Z<~#eA!LC&+`hsa zyF=!qF@qHrHya;88)SuVo`-X4fcbE$=+G6Ik3*Z^dGpMNQ$>fakdKdm4G`Y`sE);a zd;~0Thw9XGc!8LY!y|wyARiwA3tUuEF5E){%*P&DZ)Z&Aqa9oAA!$ZFycaOMeA$Bl ze9Vk|crRcETvRUIK?BUk4oYum$c%h=FJKx{+hIgyJ`Q8*pc~D}hi8Dw;c1Ws^ES%K zhi8B~hye&;dTD#vqC@>mxaa+=l- z-}nRxvhzW5AOu0X?yh+x#2aX1dg=1>L2w`x_W=mq5+IG>QGgFZggTJ?N7wb@8?fo~ zW;V$3`wzkdL&O8B-3B4e(9sp}ADwf8AxHWyDy`1%kY6X5ZS_su0~MCFWMFhPhc$gTJ8;gC$|tE!^Lt8iHNXvGk%d8V1ch( zCdFm!Zv3M5*u8b^8z?Bmhb=@+IlB<8FCSR;27jK(DLEK z>v0>$M#ybw@AmJ)gAd2Phw4~d`yjWk+grFpIv>3Xfb04e)N}ZIp!4CvK`ZAO<_72@ z^U-VecV^sxdJcaJWImiU=oQ$3w2v2+k6t&wJEwj19R3cde0Z&G7joEvWa6to8IS** zemE*0i^=_7)62^}jvDwc7Bi&R4v~-EB9J3Hy}aDxsDbME@Z1|)u;D$jJUmy&$6|2L zSN;^{7<}}eT&&gesORv#*5*IR&wZ?5Tu=BpkSr`SA6e9TGo9APM__o$4;p47vNk@R z)p>(@%?p?;gxm}tyn}iOKB(?OtH%pm=0k%*$f$#l^+)R{KQoZUpou%JZGI6f?sr<(?d}C=$5yn>LZYA!@IYP zuI6ak8XRBonIzv$#xk0S9)-+@s8oaru_#)&&<-Xcu*L%HST!#5`1^B$PDKdp=exZ% z`%xy`w%g6%^$uT3_8UI<2C zKQV|K>(*O)@j>53B^W55W=TOszc`S5a@<1CetfJ-U6gBi-4zd@m=OD{w{i}I~>3N{`>gy{mU=+G`Z1QFz-3s!Zt&q9dTg{ACcPoB_ck^bT)uya(ClP>#Di>jyhMz0h^Bk+asPFp0DX->WSaG?`!L(& z!tTQbd3ip*SY{OyD_;XAnyZ5_&M|`Xpsa&k3cT_1(tOZd$HvO{UxEy<^;tr7xIRDF6f2;Hu7;~91JnB`1*5)h^?%UqF+>0Dd)9?b0I+bzL|YcE~Kz<%{gzN@XGkr3<7>ei0WW(^eJ(u7Uh~eDh-ftsMf$_#DC-h)6#tMAy=BYi8#oWXsgfNEjfKd6#X} z7 zvhtB)TTJ8Q_kfKuHg>26vhtC^dyKgFZ?%VNhuh`kBXw-LxRQuPOpw9|CRIj>wgR}Td_9z`1o^jx3P6t zbdk$^WTEjdn>o{;m0ZIxA36AleIUrel>hT&!8gf#1gp;8Fkf&wgHtd>Wj^d?4lc>H zwq4yyuw>p1nGbK3xf`r@%ym*O0%1Pf=Ju_T-F^K2yRS&W^_h=g)mahk(!2_`eVVwff? z#eGJstlkB=_HL}KoeKfg`u`3=40`28TWF*D@y^B)F_ zrp?O1N5&r>lOYTH+o!$?+%-OZNPl?!;jA2d@bjlwz@e1k@rUDYq-lTmh?3#;r?YbK zQEY?E*As-*-_w8GBp;;~FbDYl%T4l8Y5`LwJnh(jg!x^2t3qFJDD(9f=Hm}`ONW&d z3P8ey^KQld!&_yp2J$jA(^Z+>v5x&ma{p202ObJdFU&`JK1xh5Wxm`1o|5Mm*L2}u zo@q)EyDc@nFdymtM^|7Awbb;&d}QDw{}x%H%`u)|x-J7B`6JX~?t}eD4nA@_kaF&W z`N+XXZU<7%eJ~$c_{i%(3c3&GBMTp0)~`wVueifo@cu`*?y!~_A0sRD$?bf1%m-%W z@UncHsKvHUr<-R!!WlqYX8V}GU~mdI$b6tyjwsAD!~8iyq=2T(M}X2uP42S*QgZDw z-X`-wGImI%93e>A;DhfazusIu`qQjlf10^& z#jtdf215BT(J^`xuZNS^2GwgIkPmrg8NpbO+YLmjH)aL_!}xe!X)v7JY8aA1`}KDj z!bfj_Ld@bQq<*_oB@E!hg~!Va1431Q_4NYy5M71koTr%T4Nnx%pAR(lSa{(em8k#P zt9kSBupofHG9a~Eo+h6+A2=3kDTg35{nuX0mk(s)V`XDHVFyyX=}Gc=^3lr>AXn@_ zNcyk6k|!Ue;B=;j9Z2oAr^x5Y2jVc)qMV<^z+(l^cengZ0mXDh>iF@|s}Nwqvva{etaml!7sCHq8bQg7m|^XjC|w>K!mAf zgEI?=8Fk)L*BSZ9;Q5Vsyu2_V*^u+%qu<`MgtPQ~7$%ol4xVCi0g{oA5`HfA0TWaJ}t{9y@BXRpE`Y6X0Bh=YI?*j}O$vt42$_=tRShmzTt&HDSC0Li+LHu#rqi zV(G1$AM>cpM`C@?-TCp+%LJfTsUrf1?_xeG;KL^XNgRH3%tsag9G&|4kIv!bMTg=T z*t^&%2Kk%p(wh%g954ftBN{--Y*P6R z2<^{@YoR#;k^_$p8<^ckCe{M@!0a@8k4)A=97rbZaJM0RxB$uHJ-}Ah#S_~xmj;6P zz_-b=;nCT~%{XE%y|>bD7$2S8)#qJk8aGiHk9@QR^0C`n*#IWvkq-~Q=TBuh4DaO< zrc#E@6bs9@dfcmE|1qje`T_Q0Kff-FT5Qb20usf?#7GZ6w$S$_JcnSUc~BvPPxELX znvXnUaj%tVfcdDz5S5C-d{kM{M5SUdAC(%W60w+%N(@n{7|chd zhN(m>=A#lrR4NAZQK?}n5sUe##1NH=!F*I|m`cQAJ}NOprD8B2l^UiJv6zoa3{j~V z%txh$sYER1qY^_@DhBgWsbMM+i}|R;5S5C-d{k +#include +#include +#include + +using namespace std; +using namespace cv; + + +static void help() +{ + cout << "\n This program demonstrates how to use BLOB and MSER to detect region \n" + "Usage: \n" + " ./BLOB_MSER \n" + "Press a key when image window is active to change descriptor"; +} + + +String Legende(SimpleBlobDetector::Params &pAct) +{ + String s = ""; + if (pAct.filterByArea) + { + String inf = static_cast(&(ostringstream() << pAct.minArea))->str(); + String sup = static_cast(&(ostringstream() << pAct.maxArea))->str(); + s = " Area range [" + inf + " to " + sup + "]"; + } + if (pAct.filterByCircularity) + { + String inf = static_cast(&(ostringstream() << pAct.minCircularity))->str(); + String sup = static_cast(&(ostringstream() << pAct.maxCircularity))->str(); + if (s.length() == 0) + s = " Circularity range [" + inf + " to " + sup + "]"; + else + s += " AND Circularity range [" + inf + " to " + sup + "]"; + } + if (pAct.filterByColor) + { + String inf = static_cast(&(ostringstream() << (int)pAct.blobColor))->str(); + if (s.length() == 0) + s = " Blob color " + inf; + else + s += " AND Blob color " + inf; + } + if (pAct.filterByConvexity) + { + String inf = static_cast(&(ostringstream() << pAct.minConvexity))->str(); + String sup = static_cast(&(ostringstream() << pAct.maxConvexity))->str(); + if (s.length() == 0) + s = " Convexity range[" + inf + " to " + sup + "]"; + else + s += " AND Convexity range[" + inf + " to " + sup + "]"; + } + if (pAct.filterByInertia) + { + String inf = static_cast(&(ostringstream() << pAct.minInertiaRatio))->str(); + String sup = static_cast(&(ostringstream() << pAct.maxInertiaRatio))->str(); + if (s.length() == 0) + s = " Inertia ratio range [" + inf + " to " + sup + "]"; + else + s += " AND Inertia ratio range [" + inf + " to " + sup + "]"; + } + return s; +} + + + +int main(int argc, char *argv[]) +{ + vector fileName; + Mat img(600, 800, CV_8UC1); + if (argc == 1) + { + fileName.push_back("../data/example_blob.bmp"); + } + else if (argc == 2) + { + fileName.push_back(argv[1]); + } + else + { + help(); + return(0); + } + img = imread(fileName[0], IMREAD_UNCHANGED); + if (img.rows*img.cols <= 0) + { + cout << "Image " << fileName[0] << " is empty or cannot be found\n"; + return(0); + } + + SimpleBlobDetector::Params pDefaultBLOB; + // This is default parameters for SimpleBlobDetector + pDefaultBLOB.thresholdStep = 10; + pDefaultBLOB.minThreshold = 10; + pDefaultBLOB.maxThreshold = 220; + pDefaultBLOB.minRepeatability = 2; + pDefaultBLOB.minDistBetweenBlobs = 10; + pDefaultBLOB.filterByColor = false; + pDefaultBLOB.blobColor = 0; + pDefaultBLOB.filterByArea = false; + pDefaultBLOB.minArea = 25; + pDefaultBLOB.maxArea = 5000; + pDefaultBLOB.filterByCircularity = false; + pDefaultBLOB.minCircularity = 0.9f; + pDefaultBLOB.maxCircularity = std::numeric_limits::max(); + pDefaultBLOB.filterByInertia = false; + pDefaultBLOB.minInertiaRatio = 0.1f; + pDefaultBLOB.maxInertiaRatio = std::numeric_limits::max(); + pDefaultBLOB.filterByConvexity = false; + pDefaultBLOB.minConvexity = 0.95f; + pDefaultBLOB.maxConvexity = std::numeric_limits::max(); + // Descriptor array (BLOB or MSER) + vector typeDesc; + // Param array for BLOB + vector pBLOB; + vector::iterator itBLOB; + // Param array for MSER + + // Color palette + vector< Vec3b > palette; + for (int i = 0; i<65536; i++) + { + palette.push_back(Vec3b((uchar)rand(), (uchar)rand(), (uchar)rand())); + } + help(); + + typeDesc.push_back("BLOB"); + pBLOB.push_back(pDefaultBLOB); + pBLOB.back().filterByColor = true; + pBLOB.back().blobColor = 0; + + // This descriptor are going to be detect and compute BLOBS with 5 differents params + // Param for first BLOB detector we want all + typeDesc.push_back("BLOB"); // see http://docs.opencv.org/trunk/d0/d7a/classcv_1_1SimpleBlobDetector.html + pBLOB.push_back(pDefaultBLOB); + pBLOB.back().filterByArea = true; + pBLOB.back().minArea = 1; + pBLOB.back().maxArea = float(img.rows*img.cols); + // Param for second BLOB detector we want area between 500 and 2900 pixels + typeDesc.push_back("BLOB"); + pBLOB.push_back(pDefaultBLOB); + pBLOB.back().filterByArea = true; + pBLOB.back().minArea = 500; + pBLOB.back().maxArea = 2900; + // Param for third BLOB detector we want only circular object + typeDesc.push_back("BLOB"); + pBLOB.push_back(pDefaultBLOB); + pBLOB.back().filterByCircularity = true; + // Param for Fourth BLOB detector we want ratio inertia + typeDesc.push_back("BLOB"); + pBLOB.push_back(pDefaultBLOB); + pBLOB.back().filterByInertia = true; + pBLOB.back().minInertiaRatio = 0; + pBLOB.back().maxInertiaRatio = (float)0.2; + // Param for Fourth BLOB detector we want ratio inertia + typeDesc.push_back("BLOB"); + pBLOB.push_back(pDefaultBLOB); + pBLOB.back().filterByConvexity = true; + pBLOB.back().minConvexity = 0.; + pBLOB.back().maxConvexity = (float)0.9; + + itBLOB = pBLOB.begin(); + vector desMethCmp; + Ptr b; + String label; + // Descriptor loop + vector::iterator itDesc; + for (itDesc = typeDesc.begin(); itDesc != typeDesc.end(); itDesc++) + { + vector keyImg1; + if (*itDesc == "BLOB") + { + b = SimpleBlobDetector::create(*itBLOB); + label = Legende(*itBLOB); + itBLOB++; + } + try + { + // We can detect keypoint with detect method + vector keyImg; + vector zone; + vector> region; + Mat desc, result(img.rows, img.cols, CV_8UC3); + if (b.dynamicCast() != NULL) + { + Ptr sbd = b.dynamicCast(); + sbd->detect(img, keyImg, Mat()); + drawKeypoints(img, keyImg, result); + int i = 0; + for (vector::iterator k = keyImg.begin(); k != keyImg.end(); k++, i++) + circle(result, k->pt, (int)k->size, palette[i % 65536]); + } + namedWindow(*itDesc + label, WINDOW_AUTOSIZE); + imshow(*itDesc + label, result); + imshow("Original", img); + waitKey(); + } + catch (Exception& e) + { + cout << "Feature : " << *itDesc << "\n"; + cout << e.msg << endl; + } + } + return 0; +} + + + + From 05bc7621e62865815b0988f98d8edf814ea560a6 Mon Sep 17 00:00:00 2001 From: laurentBerger Date: Mon, 11 May 2015 13:20:52 +0200 Subject: [PATCH 2/5] trailing whitespace --- samples/cpp/exampleBLOB.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/samples/cpp/exampleBLOB.cpp b/samples/cpp/exampleBLOB.cpp index 25a575540..de6f0c607 100644 --- a/samples/cpp/exampleBLOB.cpp +++ b/samples/cpp/exampleBLOB.cpp @@ -175,7 +175,7 @@ int main(int argc, char *argv[]) label = Legende(*itBLOB); itBLOB++; } - try + try { // We can detect keypoint with detect method vector keyImg; @@ -204,7 +204,3 @@ int main(int argc, char *argv[]) } return 0; } - - - - From dfc508bb15821d1c83211657881601e42af9f62f Mon Sep 17 00:00:00 2001 From: laurentBerger Date: Mon, 11 May 2015 13:45:08 +0200 Subject: [PATCH 3/5] problem float constant and position of > in vector --- samples/cpp/exampleBLOB.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/samples/cpp/exampleBLOB.cpp b/samples/cpp/exampleBLOB.cpp index de6f0c607..a1a020f06 100644 --- a/samples/cpp/exampleBLOB.cpp +++ b/samples/cpp/exampleBLOB.cpp @@ -16,7 +16,7 @@ static void help() } -String Legende(SimpleBlobDetector::Params &pAct) +static String Legende(SimpleBlobDetector::Params &pAct) { String s = ""; if (pAct.filterByArea) @@ -103,13 +103,13 @@ int main(int argc, char *argv[]) pDefaultBLOB.maxArea = 5000; pDefaultBLOB.filterByCircularity = false; pDefaultBLOB.minCircularity = 0.9f; - pDefaultBLOB.maxCircularity = std::numeric_limits::max(); + pDefaultBLOB.maxCircularity = (float)1e37; pDefaultBLOB.filterByInertia = false; pDefaultBLOB.minInertiaRatio = 0.1f; - pDefaultBLOB.maxInertiaRatio = std::numeric_limits::max(); + pDefaultBLOB.maxInertiaRatio = (float)1e37; pDefaultBLOB.filterByConvexity = false; pDefaultBLOB.minConvexity = 0.95f; - pDefaultBLOB.maxConvexity = std::numeric_limits::max(); + pDefaultBLOB.maxConvexity = (float)1e37; // Descriptor array (BLOB or MSER) vector typeDesc; // Param array for BLOB @@ -125,12 +125,8 @@ int main(int argc, char *argv[]) } help(); - typeDesc.push_back("BLOB"); - pBLOB.push_back(pDefaultBLOB); - pBLOB.back().filterByColor = true; - pBLOB.back().blobColor = 0; - // This descriptor are going to be detect and compute BLOBS with 5 differents params + // This descriptor are going to be detect and compute BLOBS with 6 differents params // Param for first BLOB detector we want all typeDesc.push_back("BLOB"); // see http://docs.opencv.org/trunk/d0/d7a/classcv_1_1SimpleBlobDetector.html pBLOB.push_back(pDefaultBLOB); @@ -153,12 +149,17 @@ int main(int argc, char *argv[]) pBLOB.back().filterByInertia = true; pBLOB.back().minInertiaRatio = 0; pBLOB.back().maxInertiaRatio = (float)0.2; - // Param for Fourth BLOB detector we want ratio inertia + // Param for fifth BLOB detector we want ratio inertia typeDesc.push_back("BLOB"); pBLOB.push_back(pDefaultBLOB); pBLOB.back().filterByConvexity = true; pBLOB.back().minConvexity = 0.; pBLOB.back().maxConvexity = (float)0.9; + // Param for six BLOB detector we want blob with gravity center color equal to 0 bug #4321 must be fixed + typeDesc.push_back("BLOB"); + pBLOB.push_back(pDefaultBLOB); + pBLOB.back().filterByColor = true; + pBLOB.back().blobColor = 0; itBLOB = pBLOB.begin(); vector desMethCmp; @@ -180,7 +181,7 @@ int main(int argc, char *argv[]) // We can detect keypoint with detect method vector keyImg; vector zone; - vector> region; + vector > region; Mat desc, result(img.rows, img.cols, CV_8UC3); if (b.dynamicCast() != NULL) { From 780f4ae7c5f57a0e6382b78937a123c43d617719 Mon Sep 17 00:00:00 2001 From: laurentBerger Date: Tue, 12 May 2015 19:01:05 +0200 Subject: [PATCH 4/5] try to implement remark included in message --- data/detect_blob.png | Bin 0 -> 34115 bytes .../cpp/{exampleBLOB.cpp => detect_blob.cpp} | 12 +++++------- 2 files changed, 5 insertions(+), 7 deletions(-) create mode 100644 data/detect_blob.png rename samples/cpp/{exampleBLOB.cpp => detect_blob.cpp} (95%) diff --git a/data/detect_blob.png b/data/detect_blob.png new file mode 100644 index 0000000000000000000000000000000000000000..fe8537ab0fe1511232e07d7ce1769e959136397e GIT binary patch literal 34115 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%0DHR1k=8F4g0692y=UTFTh#zXqgrUzV!tO2|; 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
  • xr~OpRXqwGl}ahui3V?Wn2VzLz<9O0@;Kb49)@N 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 bJG`NPnMy;Nx4?}~d-mv{4YUe1?uPs?@I4cQ literal 0 HcmV?d00001 diff --git a/samples/cpp/exampleBLOB.cpp b/samples/cpp/detect_blob.cpp similarity index 95% rename from samples/cpp/exampleBLOB.cpp rename to samples/cpp/detect_blob.cpp index a1a020f06..badbaaa41 100644 --- a/samples/cpp/exampleBLOB.cpp +++ b/samples/cpp/detect_blob.cpp @@ -9,9 +9,9 @@ using namespace cv; static void help() { - cout << "\n This program demonstrates how to use BLOB and MSER to detect region \n" + cout << "\n This program demonstrates how to use BLOB to detect and filter region \n" "Usage: \n" - " ./BLOB_MSER \n" + " ./detect_blob \n" "Press a key when image window is active to change descriptor"; } @@ -71,7 +71,7 @@ int main(int argc, char *argv[]) Mat img(600, 800, CV_8UC1); if (argc == 1) { - fileName.push_back("../data/example_blob.bmp"); + fileName.push_back("../data/detect_blob.png"); } else if (argc == 2) { @@ -82,7 +82,7 @@ int main(int argc, char *argv[]) help(); return(0); } - img = imread(fileName[0], IMREAD_UNCHANGED); + img = imread(fileName[0], IMREAD_COLOR); if (img.rows*img.cols <= 0) { cout << "Image " << fileName[0] << " is empty or cannot be found\n"; @@ -110,13 +110,11 @@ int main(int argc, char *argv[]) pDefaultBLOB.filterByConvexity = false; pDefaultBLOB.minConvexity = 0.95f; pDefaultBLOB.maxConvexity = (float)1e37; - // Descriptor array (BLOB or MSER) + // Descriptor array for BLOB vector typeDesc; // Param array for BLOB vector pBLOB; vector::iterator itBLOB; - // Param array for MSER - // Color palette vector< Vec3b > palette; for (int i = 0; i<65536; i++) From 31ef944176134b4cb8d93b3bdd4200ed2e1feadc Mon Sep 17 00:00:00 2001 From: laurentBerger Date: Wed, 13 May 2015 18:06:26 +0200 Subject: [PATCH 5/5] remove example_blob.bmp --- data/example_blob.bmp | Bin 414518 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 data/example_blob.bmp diff --git a/data/example_blob.bmp b/data/example_blob.bmp deleted file mode 100644 index a974ef2c20a35c06ed06ccd08dd495cb096fa286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414518 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