From 4a9170ba421a241eed84e460f5e6cab43e0d6ea3 Mon Sep 17 00:00:00 2001 From: rishirajsurti Date: Mon, 21 Mar 2016 08:23:04 +0530 Subject: [PATCH] Thresholding Tutorial using inRange function on a video --- .../imgproc/table_of_content_imgproc.markdown | 8 ++ ...reshold_inRange_Tutorial_Result_input.jpeg | Bin 0 -> 35791 bytes ...eshold_inRange_Tutorial_Result_output.jpeg | Bin 0 -> 10927 bytes .../threshold_inRange.markdown | 56 ++++++++++ .../ImgProc/Threshold_inRange.cpp | 102 ++++++++++++++++++ 5 files changed, 166 insertions(+) create mode 100644 doc/tutorials/imgproc/threshold_inRange/images/Threshold_inRange_Tutorial_Result_input.jpeg create mode 100644 doc/tutorials/imgproc/threshold_inRange/images/Threshold_inRange_Tutorial_Result_output.jpeg create mode 100644 doc/tutorials/imgproc/threshold_inRange/threshold_inRange.markdown create mode 100644 samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp diff --git a/doc/tutorials/imgproc/table_of_content_imgproc.markdown b/doc/tutorials/imgproc/table_of_content_imgproc.markdown index 77de126c21..486c6449c5 100644 --- a/doc/tutorials/imgproc/table_of_content_imgproc.markdown +++ b/doc/tutorials/imgproc/table_of_content_imgproc.markdown @@ -51,6 +51,14 @@ In this section you will learn about the image processing (manipulation) functio After so much processing, it is time to decide which pixels stay! +- @subpage tutorial_threshold_inRange + + *Compatibility:* \> OpenCV 2.0 + + *Author:* Rishiraj Surti + + Thresholding operations using inRange function. + - @subpage tutorial_filter_2d *Compatibility:* \> OpenCV 2.0 diff --git a/doc/tutorials/imgproc/threshold_inRange/images/Threshold_inRange_Tutorial_Result_input.jpeg b/doc/tutorials/imgproc/threshold_inRange/images/Threshold_inRange_Tutorial_Result_input.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6d23ca13251f5e558565b5b95ccd941a612bb4e3 GIT binary patch literal 35791 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/threshold_inRange/images/Threshold_inRange_Tutorial_Result_output.jpeg b/doc/tutorials/imgproc/threshold_inRange/images/Threshold_inRange_Tutorial_Result_output.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c5865132a2aa4988b07e6316d61eb7da5d32512c GIT binary patch literal 10927 zcmeHtWmH_t+U9N=_h3O92@N5*OXG5ohT!fb1b25&ur$^L2pWPzkN}Mbf1e4T5C$eL76wKRCKjP)9$f)R;SY+~>l+?7h=^1(X1%*Y$ zC8cFGwWzxKhQ_Am&aUpB-oE}XU&qELzE4g~&&)2btgfy9+}PaOJ~%u&J~=%*zqtI9 z7YG3VMeF|k7qS0=*MoarXz1u*bgVylfzW*J0e*mv@rW0bL`DD0MQLG*dEs>%{p#NMv= z>`l#>7ox2BD>i4=o`s@hmSyaTG+K!U01n0A1bo}Fuf%)>Ke*IVD5-40aKK5h1zHom zM}|Z0(HnHW&GwpKjN-XLPC?ex%q`cs%kpo^1is7fmdy*v9web_mXMrl&*7)I`**-Y zU+o^voimkOUq6d+Mm!h1Ok2ZjH8SFE(&UcS$x!j&*uC90BHzh_v@c`y16IRte~|^j z1goUlxvAxx$2h!^BG3orT`U5ib(FrF-+ol@sir_e-qU3`*4Iakt4R^V=3`AkDze{E zUU7AtqCZEJl;i}gd>%|u<>FsH$qU70e=mtUl|NoC$m%&0+!v@gGwt<;UcIxXj+W~T zp3Tr!k6hH3VeDh*a)R|LI==zwUVly-SU6MIU2HwrRn1EwYbkp&z}udSo>ys4?Rfbj zsZUIHkP!=w6}&{(M@v+v{lB-YQlvS+5HvrLEx0@opxB8=z^{`^)UbVS?ERIg^HD0B zjzUY#HyD;Pc0WYF;#__CTQK#f@7Ae@oU(HoVhEC1#@*{sNW=)hzJ3RQwkI=K;!v#$ z7dEyGZ+VG>ejU?m?wT81OHMd@(G&D>u6L>Pw|t`=QkzPOjnA@hi+76!X2y>{7-KZt z4#selPx29zYm~8*B1n7Pc|s%|lw+R&c}caX-Cnm|`wY3@T^d!-XtL55F_NeJNy*b| z!Dh!G@7Q?T3|)|wZ$Iqo>O0FM9Y<8tuJa#b+f!2ps*$i*M;567-24n+OoA1}gr-1L zDDOd5EByt37o7E6UPI}cK)IxZCl`cN!-Pqw0-OxGV36XviabE3DG%sQ)X}Iy)fy+b ziwvBcMm`~hr7;2v4^&nVx3CN`8rxJ_u36cB-0QIh>F(3jI{$>-hdzRzUzR_D&uFde zSSr+5y5ho_e8AwjcZGq=R%9epk|W6%_D$R*8#Ya+x!8=le!8Zyr6NrDlgEq12gIr5 znNM4hkEKUzSd-8EAeH>>3zw6&AEP5v#Ts*%87%e}_|Mdxzi&y>9YjT;q%i00@%(&* zqrC-q3|mBd2(Q(FinUrBRJXdr~c9`(8t`qC-_gjwS?2d8z+^R9lAr=>!SsRo>*rePK;{FWSj zO_sy3$~nW2&HGa^p2NhpC1zt_1B`FH8Hx)S=@UYeT}cO<-~TXRGwY*=9ezBea^Ej7#a3^4%Hr#KK7@mMr7b zD@8*E9c8z1n25NzqVWJL(~1$|AVU6xKpoPphpr1Z>Dohy;ay)Z8fk}%S9RW`Sag-Z zD&sG2F~$c5tS~0hJ|?gQeJffByZ8v|BJtl401c~XHvP==+cv0&VBR0x@^mZ`y3qU{;C=L=NolA`1pn>)GEg)~DJz9(iV*Lm{lb6;nb zO!jQ*6$x36w_{6=BwS0N-w4FJ&Zg+kcC6`PL6{6>2m`;q(2Gk(({%J2|7ytiv0Pj(;ESog;g z0jE{yd7%=gQnQlFD@j8!_OEzf+GTPduU>oyT`BF*jAT=cl(4ui&OqzgyKQrc971O0 zOkgwlGent)TF*jyRB*ke?rnb!QI0{aWrc4x8E7}n9HrJu`bl%zZVcaz$?D+TI#&v% z9=*6gW;m_LC2cc3m=xbQ==+@vbX*)EDVptLGKO-Pd(wS|#Ln>&BR4p1hYhJ8S2mk7mIEiWEAI1)zkReepuWn`BKOA>qvh&4wxa4$OJMa=Tm09J=!*HXw{T_Hc}Rs z`-=XP25&^iaHTCc6aVXS7jgRiK46z$H;h z6;Z~*GIlpD5wiF>}9>L$?JL(oSmqE zd*Nu{v;n0Qv}WIl{3sf{Ve9ko53qB$#2b9v_tF?-ntu~Iovs`iKL)7yuzvgqRgf|QBHLc=b7gwp zqN`fU5i6EscPOOuG8MS2@mr9<*(VSIQ^UH)^kL$v0l9%3)v00>6P$ZY$R4K^skS4N z?5v2y&jImmZ$N8wFzW7LX5PZe$f<)=kMQx9Ik-0CJb7jmRmjh8)I@(T)o>0-e$d+=_Ym z*jEHYt6}FOSRWh~$s(SP^?nYi=BQ#cBw3&&smVfO$)J|jN@3d~Rf1_o%|c^_?SD|H zb7!tGT=)=T28B>>U27je4JIq5;CNPq>CUeq8phqYl_QukFv*iH(&S`m3MQf7_HjSq zr(uV`rqNcXU_0m9PLe}hE5ZTSp}`>>Xl}mj$GH5Rtvi%K%yGU4&(XvMTD6Go1eqF^CUJ!co+yTK zd8xQWo>t!hRt5zW-Y*oGGC7%szarJpHeCBRe&f?kfR4h&y zjfPsd`U;-5HK8~7o5VQo)ox&q=IA6Ugh0&+459EK=jg)p0u5kW&EdB>E52ikG@+!6 zKX5LmA88z9eaf1W`bTyb)=qX`g;v$m^SNa^6cG*Fm-q&G^GC^z`vN5d;7`g5m`Wc3 z$&+b-v}N2!=o^vTQtXuqZj;xNUuioxy z_v)ri)A2ZD9&o+SuNaMZIzlmmiT@(iJ0;t#V-4SiDF?P%#GYZBZ3(BsRva1&SSe_% z&%n-2H4|T-56$tu96=}3Mhd6Y_ab(uaQW5dewgeV)T*zdYK>2I~RXw zx2PBZoIk~$V9_cL_CcX@6+sTAv$ng1VI{4fymyI^!phGP;g~%9zj*u+t`5s{e)#&l zN=&>du0B<|8x=twR?Fiy%b5xXsJNaUC`2oz6kfDnv{|nmEjHn9Uc0p1l92wyAc=khj}EMDeBs^*S)~$Ln}Yq5 z{XImzK$^ODig;hdxltGGrE~CRTy?nXI8#cd>|3WW%9k6$AGyYe@>32`0$n1Kb!Qpj zSR878RJ+o2`Ul&z{I|qZ)@^TIXZNStq39Q#(UW==zha9YU$d_povP2WYc;*=6*3AC zz7%Zz=&5=0Q#|>C=<6rve;-i@QaqrZ*R;#7&&^0wtu-i5(Kq#JwDZbg_E)PnHZbk) z>a-t3TKLLRnYd-P^o~!*72h_$)F)`MReaSxGt3kYTWuf%D$2LjUT_ESrvrqBHEN<> zm%4g6`eBdkD7#;#$oit6w3k}cU8&CV^v)c;z|KW8P7do4-5W79hucXWBUy3bO>PK! zH55qPKYPB}U|hH}wIr}Jux`;6eljM|6HDk$rR4@)ibMJjb?cFT}vIi#pN=;Y#ZrRKsemwrEB91&ekW zlJCmq=0rF@WQhSLA>kh^c>0FKubKpk6D}Ly?JX7E z6WFs)VT*-$9><{-P*Zi))e*xxU~@YgkE}STPtAi%vA9E3LdC0AUAmgY)eGZ%)W1w{Fg|(@mh`mPNN`Iw=OVt} zDzTTQ=G#~g2;VIy5SeUeya{t!rEx>-S+<*ZPjw4V;dq6(xj~)_q$;>Z;hbbH@4JW1-G8#E^F>WB_J}Xz#o3jO^Wtiuhs= z&V`B(wTh5FH!c4|ziWvS@a7$Wd)^>-pq5a%HJL^o99{avVA|1QG%Vb^v4ftKR+M^G zJYc_Goxpg(x1sAyXl%B#C6yIQa$OGeqm!>9iPjPN>05MQlQsNL@q!x`cq!gT8a0&iZon)Te9 zv_iGkUacA?aZYq`oBv9U2{`?McdtPx-iz3iJ0Lm)|76vpbX%_(LTqF_&{`C!n6w9W zAO6B(yY0|#CT*#7svu;up*is4EEh9R070$*-&OsfHHYoEobqLXhgqmODb&>+)GygL zTlUvK>)$5pU*wo~KzNmN`KM<^f(1459JS>#`A{j|Srp^xC3@H@2%%y`yFuf+wTqt zxdSf0Z=p1>B7LJy{pvDKC)J65;MvO1+0R=gn5JrW&%b8irBURA6)wjbSRU^CGPXU( zS7H++Rd@0*Uj8bugIe`g|E+f_Y>hB`ctb}CS_0iM&bWzdi>iE6-zW@HRz|V{LQ6E& zB0C71SaJCe2KK$IPEH%K&QFWrJ`u+&p}b~>FaFR^njwA$CXr2WQO+4#oB5jD#Zmn& z_qyLLVlKnc-a71M@-L-Cl)X-Np9CfrEqo)MjY8wSl9wYQk^k@tlCUmKH@GZ?5FL6~ z_~mh7abLjuUcH6QO4=S}*41Vf^F@j?nSZ== z$txEZd9K!{1*cJ*;4~=sg=1~;nhIBjLwYN9_xf?;1?fP_xO@F1)IBTWxXOA;{9%>B z))~nsJ%6v1Pp@g@TuSzTb+ZYh*Yl`jVbOm0dJ;$R`;SJ4AlZfG>`)|cBOl5}1V*(Z zP38GF1dkxnD^X)Vf2ZB{`udZnm|LH7QOg|BEWe^{-j#QzJCZl(O6d`gq}hD9?+M*8XcwiQ`nm5nx`OW0 zsT$hc>e%TNtVWFb37C{ z;Hu}MN8X5y((hs|6?yAXBY|mrrw()rkFJm`4XmWim%el$1=%#f02x>i9>G<(BeO zdOP#m$DtD6!j(FDi6oEfmL0B?w|YWd2u+_z7?`kI?za#BWUo2*InW#KJM&3RvO6*w zaG*@A{m9my<-bM^{4P!yY(VmX2n&^1s0IUhS4^d@*t=)5L-Elca)k<;fX&?(Ol7Q` z&mQtKX)+9mWdZD~Rk1$)Liwu$J2w>9rX8+x^U;QAQnIkC1^##bz{=+R(F3atTgRJ3 znSN*;vn10Iv(83xJfneVVVZ0m(7E*EN(Ho80Vvml2uTk)b^gH~G)KW=#pG7n{>sqLq{ zRLN4<$X{)Pt-MDLVUDllOu}Czi&-m33srA5pd%&r*O@TCift@5&xHo9TJ;?1i z7iR-CQQ_DfiC0p-P|sdNOqrBr^BJ;IF}vwzvgxt?8j8|e*Yd*9MJg=RNsHIZCih7b z+S9~oE_PDR>}71THWbvr<{AJC)_yFB8`ew7yy`Ck!rqZT*^368o|n^LrAY7(??@9Q zC^s9rJfcY3VeDzL#P&eM8^^yb6FT+bOW+gmlJ0r>Rs@TxSJD6U^Q#z%d9`~tvi^e) z`XIU%J6|7ec4M$d_I!!CT*lnza~VIkK!TjAXGM*`AoY6cPg$wS-CNQxlpR|gxtM`? zIX|@ad#0l5jCHdisO?$>-j7*cES$+%ZoNc;9f2C@6%lsUy<=aMSSWr{&VPZj5hcY~ zGs|Exfa3k93IhfAA4Yk$%I+AyHgEjCK2F)!s+q4ek7fW${^af!4_iT9`z)ulw!XV% z9ye1h`E}@p$#4^0%93mHiZr;)f4hSNDn@ z_3Y9t3ze3gyKdL0og!X%DizfG5PV$99?0@Y>i=a69=5HBbLna@B3-fDwK3=EYhJWC ze>U-8BKTh5{wt1h+@$WFwP>x2Trvu=RY;T=qVY+k28&Ee zKS${V;COsa4EUDNA6Z8k_s${sTDs;Sr-`;VKg6YQn4V-t2?RgnedE0@-M8?|53|j! z5WTdYiC$Bh-e0kJhWUL%{OkiTfXfz28E`r2nL{@A_>;pxG<86#bj!MXR~TY<2y5L; zcVByjqoLW@Hly`gYe7EQaf;-ZSO6T=+1dz9KgV>N@Q{Z5@>fV8d$4)tI)~Tt zM(lQwN{%riYt0?&DdI{$^!&%N?yp6$MpfLgwJpbk7%nEUNsgNp9GHcaTFP-x&pfY5 z0TCn)+WSqY*EkG;xRqdM@!Cb)4a*5*a`4Vx( z-T}>R;d`7tKKa0pSkfl-62^}^n?#63vI3Xl(y0LBh1y`4??dZ-ACwUsP|V;7x1&ho7%86YB;#^ZgmL z`$d>6PJc^No=p1+E407RAvz2Uz{lfICwzwnDC1<#43ZUEqHv-MWEjW zGh1+tc$fpG;_ce>OB$y>~aQc#ha@ zNDTFUv5MGepoR6g{iW6ZSF+)K8Hlsu+oZnhf^if4z3XOIEjZC($2`)U1ofNJ?$9_T zAYhZSRv!ABgYsrcn)VB=2<2elYg77&K)cd&79&+TwMP>N9E3`S`i&wtME1ayQ-hP3 zTMNXd$e!`2FBeVkWcgsuvhj z@mB%e#ReJZsDiv{Wf=d*xwcuR+QcK?kIebcd1yV(q8cziZvLn6{-3wz4-d>2I&35g z^a)dsQuum{K?hkjQ>7&Ux{w++#BCB8Dts-m${Etdv8w#t1_cKQ>U7VkdWFI9#l;o= zTuBE}X06qz`p+pKxVW!mhS@nH>S zt+)E-VslxME~xOJW4X7JX1%z~h|OMaM8K=-NkgYsCDV)kQ?Lrh4`-D_!5Qe=FFLNH zE0ml(Gj|kNJx|j$pAyX{3b5#PhT)Ao6&;Vf=lXeo$r;Lco*ZDk05$WO(4S2iKMKJjKhp8?w&=A zngg(0iP^$@I>$mGjiusOS7ku)X{F-Cso-JS>%#H1sTZa~42cRtY10~C-GkkW-%I99 zfFk~d4)6~_M;RMb!>6>gQOHaN=+vJcE+{j;@_}vg-ODSnu>evDK>{cHI=}|89NEYk z{{x9VE9gDlO`+i{vL`R}4pK$28$}aIL|X#R-5-i6wy&OVD=n={`NXE2VzOSH2wTl@ z8@3;u@B*>bW!Gb5C>avAmtO;T4}OX21*`EU$2b0Yzvn+LV-dy<^zePLq)VxYnh@we zT4##)nL~>9F0{DyuY7P2MbGdg{xSP`_V`1>iLjCg!2jUDO;*+TLPUi|T!W)xKga_?!^=*=D`NNQ zXD++nTD7YBea91UDq0FDpX<5`ZE4)fINJskbgkIh$)V^EI>?XC`ff-RUaMww_IlSf zaL_5~@uE9UU#P*bK>h~^%hrJFj*N%cW#4o{%Uy{kriOyW9Gt|u&YJ(wJImmlNXzj| zjbX{C72>JkXlj3ohMVJYECTEw^0>*fqfy?Uz}o%u7V|efL~z~yxy!>%g5^@HJ3zHM z9)3L7b+3ew_8M2+Uytw->`Bx~^p7Vn8t2~g98_C89I}pFVZo1Ym8tjN1n zoZO79ioU`E_R~ZODK`^mbSL}Dhh017&gT^94f~H{AeOkCP^q_rfTv(uxo?2#RK?g2 z%?48A4-`B(T7Kd3}1l;dr9yAAzgfs4LX!t|vFIozbkxdv}<;K->Y| Jp;C7<{|!GE-Io9W literal 0 HcmV?d00001 diff --git a/doc/tutorials/imgproc/threshold_inRange/threshold_inRange.markdown b/doc/tutorials/imgproc/threshold_inRange/threshold_inRange.markdown new file mode 100644 index 0000000000..edafc06818 --- /dev/null +++ b/doc/tutorials/imgproc/threshold_inRange/threshold_inRange.markdown @@ -0,0 +1,56 @@ +Thresholding Operations using inRange {#tutorial_threshold_inRange} +============================= + +Goal +---- + +In this tutorial you will learn how to: + +- Perform basic thresholding operations using OpenCV function @ref cv::inRange +- Detect an object based on the range of pixel values it has + +Theory +----------- +- In the previous tutorial, we learnt how perform thresholding using @ref cv::threshold function. +- In this tutorial, we will learn how to do it using @ref cv::inRange function. +- The concept remains same, but now we add a range of pixel values we need. + +Code +---- + +The tutorial code's is shown lines below. You can also download it from +[here](https://github.com/Itseez/opencv/tree/master/samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp) +@include samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp + +Explanation +----------- + +-# Let's check the general structure of the program: + - Create two Matrix elements to store the frames + @snippet samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp mat + - Capture the video stream from default capturing device. + @snippet samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp cap + - Create a window to display the default frame and the threshold frame. + @snippet samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp window + - Create trackbars to set the range of RGB values + @snippet samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp trackbar + - Until the user want the program to exit do the following + @snippet samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp while + - Show the images + @snippet samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp show + - For a trackbar which controls the lower range, say for example Red value: + @snippet samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp low + - For a trackbar which controls the upper range, say for example Red value: + @snippet samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp high + - It is necessary to find the maximum and minimum value to avoid discrepancies such as + the high value of threshold becoming less the low value. + +Results +------- + +-# After compiling this program, run it. The program will open two windows + +-# As you set the RGB range values from the trackbar, the resulting frame will be visible in the other window. + + ![](images/Threshold_inRange_Tutorial_Result_input.jpeg) + ![](images/Threshold_inRange_Tutorial_Result_output.jpeg) diff --git a/samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp b/samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp new file mode 100644 index 0000000000..3801b30e7b --- /dev/null +++ b/samples/cpp/tutorial_code/ImgProc/Threshold_inRange.cpp @@ -0,0 +1,102 @@ +#include "opencv2/imgproc.hpp" +#include "opencv2/highgui.hpp" + +#include +#include + +using namespace std; +using namespace cv; + +/** Function Headers */ +void on_low_r_thresh_trackbar(int, void *); +void on_high_r_thresh_trackbar(int, void *); +void on_low_g_thresh_trackbar(int, void *); +void on_high_g_thresh_trackbar(int, void *); +void on_low_b_thresh_trackbar(int, void *); +void on_high_b_thresh_trackbar(int, void *); + +/** Global Variables */ +int low_r=30, low_g=30, low_b=30; +int high_r=100, high_g=100, high_b=100; + +/** @function main */ +int main() +{ + //! [mat] + Mat frame, frame_threshold; + //! [mat] + //! [cap] + VideoCapture cap(0); + //! [cap] + //! [window] + namedWindow("Video Capture", WINDOW_NORMAL); + namedWindow("Object Detection", WINDOW_NORMAL); + //! [window] + //! [trackbar] + //-- Trackbars to set thresholds for RGB values + createTrackbar("Low R","Object Detection", &low_r, 255, on_low_r_thresh_trackbar); + createTrackbar("High R","Object Detection", &high_r, 255, on_high_r_thresh_trackbar); + createTrackbar("Low G","Object Detection", &low_g, 255, on_low_g_thresh_trackbar); + createTrackbar("High G","Object Detection", &high_g, 255, on_high_g_thresh_trackbar); + createTrackbar("Low B","Object Detection", &low_b, 255, on_low_b_thresh_trackbar); + createTrackbar("High B","Object Detection", &high_b, 255, on_high_b_thresh_trackbar); + //! [trackbar] + while(char(waitKey(1))!='q'){ + //! [while] + cap>>frame; + if(frame.empty()) + break; + //-- Detect the object based on RGB Range Values + inRange(frame,Scalar(low_b,low_g,low_r), Scalar(high_b,high_g,high_r),frame_threshold); + //! [while] + //! [show] + //-- Show the frames + imshow("Video Capture",frame); + imshow("Object Detection",frame_threshold); + //! [show] + } + return 0; +} +//! [low] +/** @function on_low_r_thresh_trackbar */ +void on_low_r_thresh_trackbar(int, void *) +{ + low_r = min(high_r-1, low_r); + setTrackbarPos("Low R","Object Detection", low_r); +} +//! [low] +//! [high] +/** @function on_high_r_thresh_trackbar */ +void on_high_r_thresh_trackbar(int, void *) +{ + high_r = max(high_r, low_r+1); + setTrackbarPos("High R", "Object Detection", high_r); +} +//![high] +/** @function on_low_g_thresh_trackbar */ +void on_low_g_thresh_trackbar(int, void *) +{ + low_g = min(high_g-1, low_g); + setTrackbarPos("Low G","Object Detection", low_g); +} + +/** @function on_high_g_thresh_trackbar */ +void on_high_g_thresh_trackbar(int, void *) +{ + high_g = max(high_g, low_g+1); + setTrackbarPos("High G", "Object Detection", high_g); +} + +/** @function on_low_b_thresh_trackbar */ +void on_low_b_thresh_trackbar(int, void *) +{ + low_b= min(high_b-1, low_b); + setTrackbarPos("Low B","Object Detection", low_b); +} + +/** @function on_high_b_thresh_trackbar */ +void on_high_b_thresh_trackbar(int, void *) +{ + high_b = max(high_b, low_b+1); + setTrackbarPos("High B", "Object Detection", high_b); +}