From 75bd9f86b2a913db83d8cc9871d84da7eccec3ab Mon Sep 17 00:00:00 2001 From: mehlukas <29372674+mehlukas@users.noreply.github.com> Date: Tue, 7 Apr 2020 16:14:51 +0200 Subject: [PATCH] Merge pull request #16889 from mehlukas:3.4-consolidateImshow * consolidate tutorials on image read/display/write * fix unsused variables * apply requested changes * apply requested changes * fix mistake --- .../images/matplotlib_screenshot.jpg | Bin 27236 -> 0 bytes .../images/opencv_screenshot.jpg | Bin 25734 -> 0 bytes .../py_image_display.markdown | 151 +----------------- .../py_gui/py_table_of_contents_gui.markdown | 2 +- .../display_image/display_image.markdown | 131 ++++++++------- .../images/Load_Save_Image_Result_1.jpg | Bin 19591 -> 0 bytes .../images/Load_Save_Image_Result_2.jpg | Bin 17718 -> 0 bytes .../load_save_image/load_save_image.markdown | 103 +----------- .../table_of_content_introduction.markdown | 14 +- .../display_image/display_image.cpp | 50 +++--- .../display_image/display_image.py | 19 +++ 11 files changed, 118 insertions(+), 352 deletions(-) delete mode 100644 doc/py_tutorials/py_gui/py_image_display/images/matplotlib_screenshot.jpg delete mode 100644 doc/py_tutorials/py_gui/py_image_display/images/opencv_screenshot.jpg delete mode 100644 doc/tutorials/introduction/images/Load_Save_Image_Result_1.jpg delete mode 100644 doc/tutorials/introduction/images/Load_Save_Image_Result_2.jpg create mode 100644 samples/python/tutorial_code/introduction/display_image/display_image.py diff --git a/doc/py_tutorials/py_gui/py_image_display/images/matplotlib_screenshot.jpg b/doc/py_tutorials/py_gui/py_image_display/images/matplotlib_screenshot.jpg deleted file mode 100644 index dcd84f3b871e180715744963502b46b817ea332c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27236 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 DhiTtu diff --git a/doc/py_tutorials/py_gui/py_image_display/images/opencv_screenshot.jpg b/doc/py_tutorials/py_gui/py_image_display/images/opencv_screenshot.jpg deleted file mode 100644 index 2ef7d348d19b6fdb0dd9d9c02dce54502d70fe3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25734 zcmc%vbyOTr^gakT41wT*0Kp+Z0%0J*C1@ac(BN*tCb;_mK{CM!?ykcGcMBGrAcMOF zcekC-_xHZL=j>m*d-j~IneIQTyQ}M|Th(>%bDziQ$7SG|ytJG&fQAMDXs93XI0r}q zPe2$L7@#Mp(~~DpFtPBSVxbBlE-p465g{=#5g`%Lb291|&q*jriHOKwl2g*q(9zL7 zf5E`SK+8l;OGo=(BWS2cu`sa+o<1d@B_SfA{l8rv+X14dXgp}YL1+vBIuRO(2<@>8 zphNZZ3EKY@;Qv?9&_NieUOvUf!A0Fr^9(>o1A)*{{YL>n-R+CI4qy;HA%4mE0rR=4 z2^NDR30FW&_EScQiVjk>zeh~mrcQy_IAkx#DJWmPW@dTA%EQaYFCh3{@}rcrjI5me zXLSutEo~iLGxIMNmR8m_&MvNQ?jD|ALEnNyLc_kpV&i_sCnP2%r{v`3HX8!KQ=xwiJY3AnO#|3Ti@8+`nSDvd~$kresOtqee)kKGywF! zV4=?c3)ue&7ZC~$>FF7%ZKd54vI6i0K3V2E)5tCiffz8OR zc0_9G^cRPWiD%{2@qf_%2igBMV1fUSkp1t#{tsNU03HYpWjqiOAO_rGl0=fnvZ%8; zLQAq70CM!q)>80Y)@BswKI`>4+M3a>Va-Tl3Vz}r1QusRs%CSK z?8AJVajx7R0j-I18bw~;_YVrCQWX)Di?UdMKI0HHuVBuo5GKX6Zeqkh|T- z>n36nkb(3g;008*Mx5&nUgi#7X5k9`TheGA@e&^Sf2}(3|KBzN*5 zH_*RGhEXq>8Fl zx@naMD5FL-iL43D)aDbPKSNtayHUYho_O_2Tx;MYm(F{8SG6^dLWhot_NmB@h>&h= z&3MAFbd#m;T%q=ft_tXY9(j%DiHk$AkJpz=#z0}f(uHwVm zDPl04yK9lDA&qr+wz%&R$ZQbnX>>#0$=F-DLv%AI7R0VbvHtlz0;ehb$0>KeCw)v- z89Ak<&OiM3O8*EKKb&KNHj#Cz^C891>?Y@XE6^FlGuOWWvZ+kCQ@3pu@#=ou+&ww! zy!gOJ!L8ERaO4s2R|I^)^?&Q9h7?w*PS9>`d++agLc0>%AA#PzN8s{o6l*Mhq=jmv z#b;Jn#z*Ew+#|5msciIY$(6q<>ek8%^zVN0jO-GTCKGlj_XtGw9X|pF_$MyOFU|DRF&v?P6V2UjNcNKd6Zir&R~ zSo*KNI;HJLvb(=MMBouX^ojLA#nf?qnM z?GYH?%Ulzu%b&ZqdMl%Q*YgN`3+;NPBrI8K`Ox;Cg^aG`g=N17Aa+7`J(*D^*!~l} z2FH{%N+R}X>Z*SPq92MMfdKml-e<@5-NvQloIs5s`(o%w1?5-a@N`PpZvYJ9=c>ma$Ce>CZ4a1z4?Ji$o~;oN=hvxB4{wOfAvdl5yC=%WWr!;|;m;7!si_*D zphZ+g7U6_LZ^OOS(xFlE->aoA26`&}iK@tgeH564xvq!TjY+msuEKN*s09QS`-J;H zcc!TsT*Yb!;d^UfJ+z`mhO(n&qWSalnESRe)FM_!O$xv-{qR39Cfl=9-@gU9wUyS1 z9R4=}&Z2N_QYL<7C+bXS-~P`kTnrwuvm)HR+g;Sk4) zp1LBGnUs}LkS^{QBOEUpbXl4w+}NJFlJ|``v5M_MMy}87Z*Ma1G{MV?%H8kxKEHKc z_+9x`xyCE3xXD6@MTE_n~pl{QCgy+Z&72T~h-6KFMKP$CHor?Nix5YdH z#~R0q7ggo@e4lkE#4j5CkIUF49)YgEc;zi6YyS%>a652Idq{Wu&$rFi+N%<|I{0?)SU(Y#6)_-NkD+0UzPUC$Qy*`lt2}eMCq~Gb?ij*>vH&S`y3w8tQ znS&1X!2a0!>niA-rsz>gC(a*hU)IraMA?Mx923-IsJ--wIp1|(m#PR(pStKWgV zU-2oe*53NVn~Cs47fS9Qg!r(Tz6Mj>`ZK_(%nn$l`ki50F7C z4#0yoMc*g#oVZv(#G4BSa=bshEjkZQ^%C9D$V>4|i<ysr|CUi4h`X-wF3kNK zxG)wc?>4mxgR=&Nr|joOBupI={6y=4ko~YLv^6%$jDZv$Qw1|U*H7OiR(h`jVz5t$ z)udfu&HdwrBffr~g(c6$t-?%gGYG|)xP-Zu$yc3KqL`pF zI1A6u$XC%UAQFTy#_|J$9K)u7Ji-a&!}z2#Rc&W`SRp&&mvTG#b*SehiW_3GnDv)u zlJgCtAZZh6NIOnB3+O`^zWt@NUwrRXU^i2uQ#s*SqcySim0-6@>$l}53#dQ?JZ#wo z?oUu8_pIWdP0O^sV7!#}IGmZ8J_Xp1)fUcs@653a$yXK+S) zQ!9`X_Fw9_fFV0;!y z`C#O{X6`on0b5wdNDbgYP!M1@ZHC3`FaFk!RNaMl)?=x|P>pxO2<+Nz?(t4p)%m-+ zIVG^@&ocuM+N|>a$+I>{q6H(FtLtF2y&L7At|&WNb@E|+z)6Bjw!O3#`I(xpGf2(q z2=_<6k&jm1v{l&G(Ej%-Sm5m8(R#IM!EFQIAJ=;XH|xSuXcY~wJPNE086a<73{vO< z=WsrBhDF5}b#ZfB6buzE{$$z`@5t3BTg>A3D7`FBlURe9%xxW{lZdNJja!l8D0~9B%{Rr#uD!3TYB}?g0q-5!9TjFsnLc2 zZWZOX=&h4mDfM(VUWcxw`E2S$k&|0qUEd7a@&PBxy`RIH;j9w;*3&ykoCP!@-$|Y%&5o)6hQG3%qTIv7V zuYXh_n-tz;2wVxT`ZnAU*fDb^($aN)Z&_zlWPgR-+9L z6v>;-=B1sN$NhG;1zk^x70<%61bfG7n!#~_ET96U#cOmS)8<@V2UjlN-AP`7bU1;G z%?aF(40fK{stC9=irlIGhIP5Xf7r@nM&oyqZpx^7gv_sz+RL@nCw!Te+k}cRT-?yK zK+BR3bDXpoNxs|jAk(s$DTbUWI~A>84zCOWR>P){X0*jd1L7ejaZK>g)MsZF=3?HZ zE57wVBvr0ixQz!9sZQYFvTKYE3`&7r#YpjMA$g8d}?pdw^aA$w?OX5C!7se zYgMxtiYgeed@lH@&Tjfp(}g@}7*q`6wfNmNZ$KRo=xm@-5U9pU|A{akFsd4x(8K27 zoUN+S2`9Gw957bhI&o3^pl1oncbq-QdEJCl0HqCs1ijRY2mvxNMVtaBa{dBeSAxF?-L{p2-ge^av?-AZbJcq9%YL5noTXq33BA+ zUKWWG)!xY=T!L8yZQ92~CukJg`n(VMuLcLZ@SYn4Uxet6ID^u(@QcK44=AwYfr+ED z4Z8^kL4@g8xnn`OY@hCN6n^{Z4$(68o6Qz^;sG3lF{e27Vff@m;s(YPp_6&UQ9JBB zrVuyBAlTu7dt5k#trP|zR@`tM;PvO*hNao_4DD15&0N7*vp*j44w+@Qvu2z>s%AdVZOvRYmW~ zJ_3J?Z*Hf8C+(}vc`6;z2u)4^Lp-SXEQ>&SHNTAS((%2qtk={_ynHPRcqY}3jM_v1 zmfv{LV(wob&QhBn)X{pL4&1h<>q2HD6Qh`)V(qX}WDV3$4Sz1-SC__IKooUX!K1mN z<|aALOBmFvMI%R>RxXb~mE8O8BDTD=lgi%x?M0|yDkSgZVqN`3rTuM9LS=kREp>RB z*J=S_{3evSMzx7u7mcL1u|iE>6s$B+T~AX4f^>evg%V0YM)z%3$W})5wbHD+v(r5U zh9U4!^|*oQ5=B5SIrdE@XZXY=e+90+By7`_sxQSsKAN?9>V%|y6Z+;VVAeY=E)t^m zd(e!PP`+D(pI?mg(7+nEW*)V6sy|i1WY- zlxF^RvTY>^nylPn;b|-vitJK$u>dNfrxYT#cjV>_TW)qIj-A%mQnoB1tSZ9q z0aNJ)-O4YUq5SsuL@~@FXyqfn-A(Bmj5$?}JiPlQmNoS)6s#SDRIuO$SqRI^Q2Em~ zDt$ZWiiROkc0=O;Wo7thvcnQXCyzsMa@B=_I*iT6sHZj%k`nFJ1bf{0A6}qd-CTl1 z9;X9CzELdiqFoL-8>MAg+M0Ho7d@U!86sdcDvI)47CH1Hn_0Gm3OhArzn^GkomaOK z6^IXk>Kv@bI48bbM^XZ6N>VPBJLSJHrT?*j{PiOFHC5)-gO1Y#%d4j^L?luhFNSoVj~%Nko)}f~1%!c>TaA z#a4J3G2$!*czm`V;pq(zpLjnETb-{&*u~FpCpdDSt??H6=679OPos8EsGU+8XKj=D8w2*uxEB}SZL^&9uoSv$_j55+o;=-%+<6u(ExxYBxoSYnkI&E@i0MJv z0K!%1Y|7r(<>GPYBz+Uy%QT7wTDel2wVekUyqu6(05PLJXiaED*6gkNuHCPLE!kp2 zoa?`7Fd{qb3zQR-|Hb1sx$ev_ zOe+wU@|0=qkN$U>CKHUUcqKD}i1*DgV{YOeeegrjC*4y>+B#|t)*1+toI0jCkLBrL zwwE+V*-XcX{Uw;B0i$=x+f$I6Lit?we}8BYAc5G_v8d2fYh1DCX$OdYe#ECSd&ih11~LZ-N1 z$yDI#ecT<+ZP-p(vq`}Y-?F|Ene}rb?#xE7E!z0i#69x{H%*Hz;qz`T>@RX;QfxS9 zy(d|Ow)ID3!6p6U+ldN9Un`)k+RhUM%Z_8&k3g^wa~;G=?tmx;?jY&qg560HAYr9I52D)V-;iKST~UsSd^ z>=9@WmUZ3d?RhdG^MJtu3d-!LlIS&GN-Ey3ma`p=y$!o4haGBF;w`m>ZxxVh;$Kvd ze3+Nb_ad+YF{{_jQP}~ModB^6NlI(I-7D6J#ga}ZOk9;GyB@@XK~cK9W-r9u`*a791f#+Z^An>MP2u z>KTdkK(8@UZi3+{P-QXJqu3a11-xA0J>RPFYKKnIaH06tn`U(H94fR@_z_uQ*|el1L8>o%wYxZWtr?T^62e)W zPF=a+%0`=dq+nV;VKe_#8@B>V?C$lVAKG%U_MO;c#t8C$O+S)enqV3c;!WM78 zFK0SgfqI0^R$8=vPeqxP%vM{9G5r{HBGj-u?~`=jFfjL;nwpI`4CZYzGbu8#o*I=U zAezx9_9ZksL$DufwGX^WKPSXnYG&ybvq(EI%Bf%Xqet9FdWAe_-_5YAIL&@@>asc$ z0c%LU88u9{gQt=cHch))@*06Ht=3*SiuvRYebzqRp`kS6RZ~ju?*Ys-Q!e@J4ZLf6 zJ78PqfvJ^Pe2=p?-}z>-Xexsu{OKCq7u&KA*CC!*C_kn}d0&V?mQ!p{g1X$-aklX2 zGW6U)#jXa2q#}HM86C~ex4tA$D4EUYh$LXtc(dij3eC5uJVp15YM9_szZ*E=L!>M- zRLLU?rxojn7G9KGgKJTfY`bdd0&YvA2F;a&=Xl=*7}7;`#u#3|_Wjh^YE82Loz8v% z&0|;V4&=I=&e2)eT1q0M{rq{o#GYu2msZ|YXb&Y#L2SY?B9jquzz`m2L=#%q0{G;w zh-iJP4nB*HMa))yBV9VFqf5*#mr*_1SZ<9s)$|C8E}XE0o!{;g%yw!ve6TT&NoyT* zC&7=arc<(!J$(}}B-%OQgTSu33HBauQQn^M6phJc2 zABY;v1g=Xq>b_-o{BfFGG@Scg87Kl#Rt!OhIk13wYK(A2l9<5Hz@!sh-Q=|3SsyKX zAZ(f4leWI7PFbAX-HBjc!=*V^6hy62S~R+qVN=a#v2yVy3&U1=>p^FP{)V#6qW18bz8e7K&-?c~pv-y=cm#HK}Fn^W|{trm9_UsXJ*>H&Kl{(dor z7uNkbuA?z7{Av506)61IGt=s_Lrth<6s@8f!SCFn*~=V+JmBN5Ycn^_+x>1-Ox z4Ky_Y`tT#Gd}C3sBl`e*UQdiz^ony3=}wA2RJZ@hNv;rd7j_^@VNJH$!&o7DnD0eD zZfw4SC2#BzQU1f>)Dxem{Sa2+zf6wEzF((*Al*IwSHYGa$nv`Sg>r-nehyUB@R%9O zR2iHy^R)M?R=Qy~)2o;%$Q$~p8Cvkz{_OCl5>S-iHc<{R5c=9{g}sBX2K0&dbHFPLHV$taY)oMfZ8G8-bbD7Q^oX|ok*Nv zPpi=$f5~poC739BueHmeEcjq8cU;>Yt%#0-~UhqIqUV_7Vgn2$3)`!^v?2U3g_Cx5e-^ zHEip!dJYnM`rAGHtQ&BneQ|UVoUd@73IF|$rZ@HLUz$0YT)eXpf3NL3Zn97lTx~fB zwdOuIHw%^9R-M1@x*w@E=e$R?vZG6%BYyG8m`wjrxQXDM#|7!Ajl5VjX!)n$d{QT) zFAE4UA&j+LyeC$zyXm>#K`djV4Uk`8_;gt=Hl-6P9$j7-Mim=uJIEs|svWqC2EP)L zt|xL-jL)#~?B1^S^Gn$+*A>$fzxQ@2uWGN@eFw44Z`RFoY|3PJ#SW6?!V;i3-;G0s zV8bml zk_4oQ76deV#8n(K$12NRab+1!Mk(^>7ASboL}OO*rF0^*F<44GIJfAE;kzwzc*fVT zKkCogkE9$ZLt64Xap#8K=M|ExeX#Gvg8jX+#-L@GIOIvyS@)HZYyx_~Y%_!3dbzmX^C9skh<3H;0}|nY`msm{2X)5edgI+Au+2W= zb@m86e>3fv5x81B%_7R@IYSoq>EYFO4d zGM*Su^EevbO@mzZ8=Dp=D9Y_N-A=1A&d?70s1mT*8CeG|y)0_qQKFMz>IaPTuFjI> zvwm#)Vsa(`@1Dr}GLmsEwy%PfZ5QVMj8u0c2XsgP4!$+t6Pr?a1bj6u5F!V^|1QXj zMu^jXr;fqwS<#g2j`@Qii&C4&O(k^X6I+Cn*LV*So)wF|2hNB7cyWytCMY@8Y> z2zUhO)aZKBTvM~e);5)gp(4se7jv?ow0CN@z(q?WYIW~|mUuHg;YQs~Dh6#^;Q63&g4Kv>e~HY!>F`-lQ6M_ zr#vC6O>Xp_xu=NCGd(%2Z*JWX{a1UO8|IFYo>_!h)%#u)d4O!*Jw$Cy^*jB$rdkLp zr0=S`&|)?BDdMd|__`{Y&xh!Jh1q;*5(eUWXq7=zHTQ zytKfj+c8fUB$i>oO1WigtxAG~tU$0Yv9E+Dhz5H;ZDIJ)_1EzVnGpZt9sacPN+64% zO8!`>#n==gVz|m1zM%^Ja^o@#MvOnO>|zVszDt=QkM0r|Q^EJ->L03c?&F>EaF(-P zQ_^eDmWg+orINcF|`4_a~XKM#a`2Yq<4g)4e23meZm; zRe<&zYKQJd6)Z=GA#!iMZygRk1^>uVnNPul1D-+6ztMzCr|&Zd80u*Vd*Wp5*jzn= zH)=T$QR)7@*HfxyWpUUi<%}7Bf0igUSJHO$+81YG+5Fn!k0}wp=%b>Q9*n!1jKaGz zJXLXrEojSQZoF(?2o&)++}F@uq^kdB`0-LmTEI6~Oh0^lTqdy}jm-i_3zO4Jov!Fm zoHB8irsum$qI=3>qM5MeYyRf%sbUAYWHe1?upPTQ)n&0~)?ioHBIPe-IRW4~sjb{- z&bYd?jO%XCrhlBh^e%sy!Xoq0`w6#TiZY$GM7D z6C8t2uC_@!91}C95WeTPmvG3nzM%XAa-fPjt9dkixpm~%d(6Ox1 zfHm0G@RaO@(?wZ{PrI_3^W1T{UU#End0dfPfx`27iEQ~_m>lhoKqUbovUU?`zok%o zXjk)e*6I=X8~ZVVEFy>)lW*l0HjOVN^w@S7USga-p=W9k=-re>ewrbz^!_Xh9U?|B zD{g4O_jDqoRh#_IdlFa9WxzmbNquy^zP6>-;aHeOFJ=yeC|pzDgPV?z@4rX3**a5f z<9X{_9{1f@Pqp$^)EOjb_V!a_-j<5fR=sV=-<`tsXK%80S^&m9i~7UXolj1t*|4cy z7|J@o;7`^JUhpSOz4@BGf!!jjCK1xfGQ#A7pgFo|gF`NV&?aXs7}V~4(GKglG;2TK zH4^t>8BP4Fy>P~;d-{C6*cbhEJx$K1)$NcF0% zol-O3miglA>hJ9a#q}h;=|{l*T5E7oXq;D!5c1i&F~4eVxG?<8WQWiZMN_`_4V<4x zn-c*yjNQG%_+{SHA_9&-T8F*X6s_60A^Cd^Ztn&>FT;enNmvb@Thkot*RBzP$7yz_ zeWYU)sL&Rht8^>O8+_AXK<-xBU0#ZpL9EbZI-^|5fnvp5XT8q$n}iV#W}2%k0_$=) z@~xDi`sh$$Eh+!pd7aw6pHcETH_n4@ImEtJ=rpWO&*NZY-c{sk+_2P7M=b+V^?%Tq zvq`g=gY9WWN<3+Mpsac}`uLNk3iV&2s6Q(Q^S+`+JiNEg?QD$hWq^VeFzlRw5`IT6 zynOq&QAIuVu4-2A@zt-hBBIS(GduC&B^Ix+QxA9(~2iT8G=LtGvk(!-lAEk>&0+NP){$) zv2~fQpBI7152!`(1qDQcGcwl1_#mR*i3`vks7R>9B>gm+$@S!df=Y0%03+!pEp0=* z7MmO?UyZj@angYCc^1B}&4r-k6Gq-Y`Ul)}ULRX5nK+A8<58Q-lLdn55x0hY!~Cod z8`61h2#!&E;>BxsT5N>s=-V|1jt`hn{v^+s4PS8F@u!4U%#f2sp|B`R{naM&{Gh!- zG>US@93vFL=e&rzD-WFKL%b~ueMP1Ws`kemAzo+KlwIF>4Ys)v3 zaKx&!=^$~|pH>VGxHf*7i1|Rh$}P-X+Vu!sTyamO#2&sILj{wd;mmf_+8?ww{QchwUX+g{n=-yHJfHyL` zXgkF(yFhpQFt1UexKdxClAl&SEG}+FdC+P+ik;oo0xzfTpSkj0i}dQ_)Z=gtnR#{V)&e z)4&M={>*5IarRrrI*zKpNZJ2MbS1%2yJS{NEWc9}ocmd5zmFD%CfWk&4_a|zh{CE6 z@=xNqdi5ofR{zT_EBg9F5DD73VLD&3$YgQq3rd5Q%!8MzF-&<|9*l>Ub{xvoQ(-=k z_ddF9Gy5+iJ~^yPx!-<^oi^J+qqrDVkQ?6zzW#a7NtiTht=*n zzwP5opFeP(+ugkx#p2K3ey`XYx!Av69X*73bj^}ol`(&|m2zl#<+!2+%|i+bRT?mV z-P%oAZWeRId*FIOboW~_1j8Mnrm(JHT+&WZPl6WA<4#MXz4rH&c?dD5U4OppVNm$` z&8br3F^&y?%)GAdBVcBOGZ%TAV6`E-9FbE^qd0z-MOj>G{Rz3=Y$MH$N*XsD)pb4R zq;&fgf&T|^{@c<4M^Jfq%N!3!C-CoAe$<~`U}k^r<&A**Y!nCAGzvDPFe|Bq{GkiB zz0zB?D9szJP-ZavEpQz|O$Z0fJVHCYMgq@sEsN(k!s`w!Rg*R-b_mbl_s{h|hCYF= zAzQ>Gj}t@gw2WN_ZnZ67N|Y2gmUALvILUql9*T!g`sZz8#Ct_Qs+EgEV^V-q9Yn^# z2R!4dHXNXjdA9OSa%D*GlT@5ab;?44!9N-Y*&8=RK{MydJz-}|rPYnZTvPeDgWg~w z-65r2{<0DNP8Ahg)&AW9xzow;%mq0pU|*b0=#DQEzg;e3`2^n^!*T8ru(+Sx-qwH7 zeTX-IC4J4CimO0HBU1Z2;YjJAyWu)=gU0uX)0<<=W8;&+SkCZ+EP|k(+EMu{4T=SI zm!a46ux>ErxNe+k1F^=1UvG_cG7gRxBzsz`9)W?3iV+)?Q6(-U%B!Oi`3!h z=l>?q7W;&m=+bQr*q37+aB)ulzM78>8~RVW=rMVVJC~}%&o(T+rwDk5leyVjCuj(3 zQLXAJd`xu;rba%=j2e7KzQDwsz4`0>kfi0*l$TY+3RF`W`8t%2UB=O#_5diS9M`Yc zz^US()2+MDcV?Mqwnqg3xKb5?lF8_&di*IGKUEH%HZU|#$xUt5*e_Obkov10w;Hp; zmQk!hu{Sl*Cv}$Iv7-4f9a)^Vcn96kFkXrS++=xJ>3v0!(38{YO(>7BRxga#PHf}C z{vPkI!m2RcvmL3%)CQDf%{S$Z{!`n1$}#ikKuj+$t(@(-w=T>5AD%esTq0xS3PNYG zyVZ~K`!u~Z;|gtz9UnNVAhvQzgg;L;TxNtD)KhlvTrup)j?ft4j;Za`MB=nTEBi{k z8hF#B<8!+e5|Y>gH&fw~{%r3~Qd$V$JfU`LV^9%$ttr!t(fBw<(skO`Mq+B#Dvnx; zcQG9`X_L|>+~KF<6fv_xcZD!7YiL@fmQ>;P$XhVkHGByxS}IqGlqmSMlL{A|6~!eHI19eITcH2$Ng2bOLCv*T8p-s=bQ6ju>vK% zcYdB;$e3??<*nLS@l)otJTh}ei_S&$;>i~QeLoU3r>!n&mZT8j$jSc2g?SqSg}CaA zA)QI~LI1b-GWl7S00N~J!}Lk9OyZJMhvcl(u|~_#-(Hme7Wi!c<}=%ys3w$@THe;( zV>*39lC%e#yhAMiRUX-CQ-|=!*IYF96g0gp%H`5Wo-Z5_BhUTVgkUDKuV5#$uj(T; zR%oSF#8`ng+xtR0teJe+1GWEvOlMSYCNkBzJn6Mn`O7bUIRZ(ty+?FYB>%Q_o^?7` z{&@t*W&bRSq>i8P^c7YF0M*85`d>%_{gtfH28t8t;c34uZhyS~dzGQY3K1G8y6Z7w z_IA)YQK8%H-PUn3x{nBe(Oh!lF?nuft}_3+gwqfpC5G4st}pF>7l^83&HcJp_Lm3R zs1ucb^TsT0^n8lMI+&WGc`@z&VEy(7c9QS`<C;|-$T_|1A< zbL##+k%c!}oNJ12jO!l8tL;RMs+pNh?7~H&gi%CG)zM;6?4PG52DF7vOtn4IoUr4= zr$+Vh?tFk~3wZRcUHU#3KH%8;Cge?d+FR$8PD+(|g3a?AjeWIih6!rtjF7UKh4vkO z0%ac+3_dbxeu63z*L6P6)s`PCOI<%AL`lZ)#7iBm>Sx|ZExx=wNAP?D^=J2%v-YM` z#0wFK{zN+$O^44wysR5W?cfDYZS*l=6lcQJT7;{iV*Dchg`=wD2j|J848%WO5nOCharzibx=I<8WUfDp|pZla$);S-d z8d3A}s6m+1733M5R>2mMKEy4D%pBcO`fVQfU{ z>ch!Sc8RKQzooJk2K_mSR!?r~R77(Zcr zRp-mV4fW@Y{ZPQ2bc~tzy4IwL3ATYLw`(}+gKu?gp`=|w8_2rp^ z6W1kBX{_TkXr$3H?mPgEFmSBE*QB+cPbGK;K5*eH2+ zyWAv(b{$AEi%zC82O{+Y;V@vWI^p(XcgMWkX6v+q&s8iH?C~n*^JT!@XR$0y?{-dw3J+ z0+@6>BHCDiElE&7jM_V76WAYJw(E-$Ygfh-?H(m5z+uXf2^ksAJ@4zSB~&P+H$Pyi z1j^*YyAbK!8uDuP!Jz&CM7fMOEXLaXm}x?p`EoNtj*a4;oncGN}ayH z#JyGlvA_5_BzV7mf_KoP{0nqV*fk}SS6r=W9Y)MCzqK^>t8942=QjY#76Hr7=OrG8 z^hFADqb>dQe=bf#lj_MA;z_`iv_*3ttTAcfN&k%TD-*QKuezx29djnviQl?edYf+9 zQQk>Xp`hj;Mq#fwagxItToy(>h}G;0^kh%%t?jGNK4l2rqhG|Wye?OAL+JYnk77|hOO%^TSqPC3MLVa7 z+A#1yQtbako2@zUA)g(IFTrp*edf4_DVDDt)uG0UK~;Z|MfeVBVcBeXe#d$kx_)Yx z6LIuH_}E~534gsl&SPn$hL0|^N@tix;mDT-eX?5BQyb@Lx8)8V>_Io4IVVv1i7PUL zs=l)zF_eY!U7n|B55M7v|+RSKi&aQzy|l|;^qe+dtK7nV*jc;VGT6t9m z#H4Jq>p0+hYDN|H*|LPi5t;=8bo zCCT)|Pc5h7FUs~bY&8;#^0>*(JE(kjb!Yp{p|4aY>9t3zP*?X56VifZwnnPo4`kQi z>ai}+qoyHi8!kzDA#s%d9b(E+Qc|bvwVfLs6JjP#YInd;iw8+W+LJAl zewUovHEe8EsjmD&%>Pu5a;0su9jyeq| zzYOB`S3-JYwSn%%t}TeKm!8mT#m=?w9d(aEgTSshZBzj&C&?d-hLy5keQT8;#)01a zuCvNFRa0E3e2?A;v z>DetHmwXpTRp)@#OOw?XSdg||)m_TWS$gvY6kXI%fKtXE^qadLs<(2?pUsW2x-JFTlB;qG!+);7%_yT)z>CJ8IEvx+E^J~a`6W%P%LrdvlaJzw_xx> zxYJt_PE@>6=nz7JLm*Br7O+`Z875`LWY(z6A(ZLId9BXYkbFsOh8xV>Fv4qXAxX=3 z*T&XxzI=@GHy?6c-{_DLHXoF5&UjCf(lxmZ?;n7E-5jyT*L420T93X<2Si$itn@gf z@UB#{eu}>*=0tt5YFM_ogI*HpW_5AA?67we`RU4w_c`FJ8H^k$0}Q=0bUtjS5!fOx zYL+aaPwbDt@BY2)$(bSk2jsX1=Huj_l{EVF?M=UU=(;{_o;ym$EYqIxy1G)cYQk?6 zdEodwtd6w~m8g{X`(^C>)hXK-IdwB(MivQ0H#V@}%b$+%9 zk79m71b0mf>}q|zd%0o2*2##KvU^qmsK!3A$*MDU_|OeFCn8O8C412z?>aqR3`Oqi z`Mpk7n`sv*O+8xgf7`b(?4^R0Ki8e~b8P;jaKcEwWPyHZ4_1w`E6Yg|N`8DAMJiqF zgA;jn$ikb*cxCO0M`IQ2(O*le~1HOMe1yV+4Zi%9=R*T=nfvy_;3 zUn0MJ*AEbZqGgD*{q(G(_upCMMc(mz+ z2)WI6@=A8SsOlx#?=6IT_SBUsb8`t%0&QYp7lH=UL!W(ZnS2sA8&V4_1cx*RKohs4 zSpHv1a@PolbTU>2N4H4Zbrv{$OL}>2PSr9N(Yw-Ao}@c1&iUOrry&ypJYqfqBH-W_ z5+cvk*F?O7e{yJ^H<+U zHK5}@m0<5euZIeox9=+CMj+RiDjKY%H=)V${SN|s%=hbL@E;u6q;x{H;JJS=B1o~8 zQe(S@$D%p>#EBa$L}n_-i!0q8B@bNC;dvBbC;2Q>?!#SW*MGRl@Sf&>tJJG(6vWUn zGF!FI4fx;}lmhJfxEJ*xW8dyM8uI$Gg{;6Tdb}y;r)rWB>n2T6^1ogBvaq%w00sV4tLw z=<&Iioi_zKEl^5%`JE!$Vj)JH+)reJ1nkp!S}xN$Y-d+l$ShLI-<>j`KRD1NjC2n< zH#76V%}jub*s{qpIcMaiO}Q?&IGSm|DRp`;nLR_uP*UMF}UX0q>^eZ=6C=87PXcs zhViT0=g_{$pl6va6t>^Y zyDDdDE@y;*1Gabim36-+SCKjTsR4ml$3ziJ1!D4@k;C9WvD$iv5&g?+8C@uWS+JXK zZs#gKg>5Bnr~y2DIW7q0ugRCb3tb+wwau!wZ^YabT)w%r97m~}tmpJ1t&rYNU&CH@ zRiu9-{5;3|US?}0m)V*c>g~NeB~vm#Em=@yG+)q~d-XZ`wU=fx8+7?P z|LG^M^^40a{NitXtd)vyyVZ1}#91>hs%ML0Y4{}3L6@8z|>e;}dXP zzXsuTHk@}`=j}dQ$}CXSx$<0A5U|xe?NY%mr$(>cbEvrYRjzSYz2ff-!6w(?VEO{Y zz@iEWWLCs!UHMvTI}gv`inv`w^Njq-nl(nD7h|EZ!?)XbYbXJ%hbvv^mZ5v`K!8*N{r}21W_VHCkW9E(R+(d2$Cq#dz}eEh%QJ(l;}k7C8Cc$qPOUb5@qx< zIQNrtp7(ve@4V;F*}wf;dzHQK*?X<)TBomcANwYKq2rul|B13MElfzCfXYbI|9B_F zJ~xY*8h9@29NXj=R9f6~ zbq~nB@vZL2(5A|^>86NamXwWaphnr0?l9v9`c{`fTY1u=ndi%_2_cAwM5;cn!DKQ> zQ1f;E{HV*G3ATLZwxvHVE8&A(`B2ql_9h5#FYxx!D-KFi;FvgfrDS0*QEk6sc^dV! zY0 zxCGuSn^l|cRSk}!M>uIPf-yA7XU?q=*;@>TDe?2|cU;-ooRJwB#Ol7P(Cxm<@%={u zxoYWrL|+h>DV(+8T6yn|1flI->>!wU;I>5ezT7W#QpWmQ9I({<5P?p)qPPt93MtPk}_!4-vAOh(Fx1H*1f@Ao`g1M$I?R;jOW{`(5i()3EjQ35@@ zsk=}f^?ZPX${WL^080UN|v2@u7vp3k@=-jL9#*<^NtptrKX@2!3sgVD4_>x%V03vQ^Awg zZoRgCkr*)FJI+5&zy$?1ypM9~2j9!puKMRZI}4u6Db4OP3w1MyaX7z+vf2pEO_b0x zGCDV7H=C0Z)Jk@Y+;`omDlBP*!WlT7-rGdVFbJ+*?$2F5p9TB8x~V}rj~KojyVSi_HuaA{d^3-a?U;Zh$d%}6DC9AkW}N&JlM zt)O@H`*FCrTG;O`R>+4uh?nFwkPEUGIs%D7gj)5B@6laQvRNNIA+gjnTVmxxZ}8c6av z!l?-mGms}K$}?x*-+9jMb7ttss4Y#meViy{bMIPs=0D*rsmV9I8X1O54GlXL?}QsLqXsku6O4QBc}eL8 zj1O|5%pgkv-`o_LH9Yx&xWSR#XP+FpbNG5x_y^tLHizOg z&$Ke#t+=jD#0;3JYj27n+5V;nN0?eor`wk((-`i4HCcZOr;_cBdAZ3IGumWj>mm_P zn%wW|5{;)}=kR#3+TjTy7pp^*HwQdh<@-48=@@MR!T; zo?3oG%0dy>Ed>oDvm-AlKlaWxk{Y-rJ(zc|BA+;T_Ek(<6-H?3(nP+|=ymCX$U||{ z$e1>`B$r-D8{Z42FfH%<^{N$U)end{05w<59mu>z!OU9GS2(?}9qlYk0u3pTGg(&N zi+NX-e-uTi)%>pFMKQ}8Yio-@>+a_xP?R8+f%N5X8Ko_KAqPH{Y%9D{TVJ8oZ>lUd zl^k@h*}OD1r3E)oGO-Jx^fH_5IC1I%hAZNRZ&I4VS?nMm)y>juPU!SRU+93$k`DEY zWVST$WnBW&;scv#kDz2hXg=-9i4;5E7bE?v1_dCsc2i|AO%^FsFBRpBcw4Azphi^vsE93cr`iLpYm}$ua zKaGwStRVoh8_MZCv`9}DsMny_qsj=rN(nDW<}ZSwDw@C9A6*s0IM?|kZ9U%%02ag~ zIM)Do3x=az?j2po?dC#iXO7kzfZKMK!Y>182;-zP%mtkOSnEy-fa(f?U=A1)#V>Br zSy^C;GVvwZU(kmDZedS?p_>!?Sr;UvJEXl04>Yw^EWrmwux!}H*Dsf0B(SlFb$zIv zv!)$@GLU=gR;GImlxH&U@Jb~%Tjt@n7z1nI0Mpe1rl4IO4g*TyifNzT;d zP6=E38b3}Y&QF8*B4n*b;s)#{@3+JH-6NU|qY~_IT0xJh=n@bMT=^zvrH<3~HD0e? zFI)p@A2UeB_fA?%u{XXE`4ShmLXztH>oL@E=LSx%7Sah>7~}%!hnY2xdB{oE0HM-H zuN{WE9(&OYh>3q3b&O4v1lU0G`w?SEAa(tlNIqrj73ZHyN|=wafvE=X{q^=<<}9+O z?dVe&CR96G>4vc7qQ?TiOKz=;M+LI0Vz*De%JByOFOl!WJW4}$Uz?39^IF-&^X7yz zqy@pHtkAh_-H1pFG!@m2@>(hL-(7|yZZ+pC||>q7U1?lx8AykH*k zWZN&%X>XfjYWiVP~-M(qi|{f&{#yi2nXw7KMz zvZfG8HvfBHYW?s;$kUwIhUB6v?seW}Tvgzc1{p{-Q*baC{GaQzrWW{zGx7+{UmRB- z()XfmUWp&73x#hQkKKgkxJ#)sMS#4>n48{?u^K{?%`E=#`wlRP7@2mQ6k{k;}XZ3T1;eo3`pQ zvXOGEABK~|ryvRPPN}QM7Nv2AsZ&X`D}Ln2=X&R=a#deQ_Sek4E*TJfElVDvmBpxX zOspw8A|%o~Z`l6Wm*14{oZ)L7j0_`SRGcVSzh55z6GS?2;GPRF&I@8~h&_y!kbgxa zu;q(;LN(0i{<)95F|&)>!T}*!KI&eQ)jpjU=I>f+??AsI7NlU!#bV`qFi4|3n-$YC zk%W;z>+OVCpHnrucu67jwB2I6!x%ZwqaUT)9hu{puWNZnRW~Zh3F{`meXCUvP2%|m z?o9{My8G-K0_G9|$7@B|XcW6}N{e6lcN~@KoPMTH%UtYJokSmh#OCsim4O^#H_h~9 z5Ky$Qk){+%C6jMvrA+PHs+qoo^MOFGdq_@>Jf&JT@SxZ9`yXbLp{1!66>E{d7!yTo z$+)m71NEvbfy12reKD;YT;9xYEqDwM_(Zz%@GHEt`Dp?4F15;XX9IXm2xtxryGjwd zE&TrQVjS&Q)@LiK3lqgEH)CR;@+`tKq<1B3wgQ8R)47-U${!zCxnD{5Y|E7~u<@*LL#KO7B zcc=#JUBRV^tQHx3JR&vNG15=OpO``HbaV3>m`dI^C9AWExb>^T_sXc`d`7D>ZR({0 zZrmvCe$Q{Yp%2gZ6HySnikhuJ`kIt2)w=jIW}P{?3`aycy~_rO=x{-^Es5;y!(MLi zP@cc%rAc)(lsTdw@VPM&gVA~@(J}szC9yJL%~`Vi%Ei>7t6peC*~7Je;#RpWP0WMv zE00Xa@);ST0}f4_Uh4%@b*7p0z~#L>VNqzznVt`;F6-&jGq-vhy1G?uV&xd8%drO+s z=#G=ICcj&P`s0DdXnqx*9-8}bN~OCZ8IO<23zJ-(DP5J%Ju)3$@D|Xnlmn!?dj8K+ zuD%51*`(2b(DVp!LMb0V5YP;@Y;@~tMX)g!1D;e2c<2Yeex%mm-R7#7i^SnOz8&Uf zf1`S`tZtN>r<%y^mBifBjPvJZk4`7PVMvGkO}^T=nt12w+~Mq0|3)%1cbjo8pt@k9R|os{Qv0)u)#W!Btkn@cZkO3FBD_t7o;h zWY#%*FQZsyJXk^$+-e~k+Ar_p_0ScpID_S06AKzu=bQ8!-8TV8dS6|5Qj2#gpT+RJv_m!w>hHm$7JUfE~4=$_axQTaqafWlFQj4I6n8ZaIvtz z^cs@SRI@YfP2D@!%L}Jwr;Tbpn4kfHZy{ej;(iP>Ura*07|l(!aOFQKucVIrGrU`u%nF16(lh=}HQ1oQvh&<3|t>IjyTDwW}bXuA+ccJ8IS3s08RX=rhLYI_oPpoCUpN`7aIdi=?RwxLeC`L)OV5b)| zc`2NIi1pbR&Lt~n31?;q_E5jw*sZ&h(7iAON%EK5)9XCy-ArQ)$KASLl~g~?f?z3- z2)y09Mf@PNz`@CnC^jVM-bUsVI2IvH#xvWzCa`l8Lz;|FFJ@ndnaFDyTKh7 zTp@R6=C&?#3G(Hbnv8H=y7)Bi(6ChM)v-NURJBMqUOzGqp$*D3C)vbGrN3a4t-}Hd z?=gKT!R@e{7%QRSp2F|Nsa)|YeQT9|aFI*!czVG9a)>YYh4!CtN>QVFtoc> zgcD=_BZTri9V#?gQD-lXfP+r=6w+Xa@wWL$l;-vO}4GubSH@qCv{qmtIz@m6tQUxm^UatU zMPATRjB4Q_f_N-PtM4d(S<(w>_PFTP1Y%rLCuEDabk?tdTTPO=Gwlw!>l5SKM9D?? zuTmB@dk94@>T%=JvQrJPe3oKP4H^(f! z4LbL;r7V9sU3?csFD4M{Ll+G~C7appjiVD5KRUW!ELx`9$oP1YiObyVeyQcnCa$>r z%wmpl?;40GxpQ&Hc*0+{FdT?SFWTZ@3#eA|$i(FI~R%tr(YCbUVBq?=V%ne$$0sC<(Lv! zbQuInT~9^7T?4kK+72toFV<_Ukc;mIhov`bJK`(eTDNTWwceidry3v=R6%O7DV!e7C>z{Ye;skj= zL)buRr|o%N-QW;Jq-B9bL?nkcYTffgcSud-PPm4%HViA!8Qsejn`HyR$ z$g*tVip&RNA8Vw$d_;~00ChTE&+Xa|7SVx@kfS_RT4su>B1Z`_MVzwR%CA11k}P1Q z#&rtLs~IK{DNA+&hDkzmB%%^Enm?8YI6Ls~l`T*q)FR&g>P4*4S;qrMU<*TIcLSEb zt5PQsqNj(Fuwp>%2Y07(oDvP^omf8^ZO{Ei@JrD{?~1=EMmqfU&WmhFFH>bq z1FRjhmRhR|Vf+2tZ88YV&`Av8Ox@GT8MRopfrKtoiWhNEQ`2EXpeoPn5?Qc{e?4XR zxIO*lxK@irRpB+8C`POE>~{ z(8=$36WQJCEUo3s*b8S+mGGHX(sB!HIcMw}&O7k@nyJrU>H0WkZ@Hjw-?Ti&<$#jG znSYc(zQNb_E4@<%1y)vY#H{n~L(BNO!?h-t3I@ljLggIjf{b zf4K%OpO(S|x(bKtUa(m6+F)A;Um5n?DhyI^={Z>*ezzzeTfsyif_$ES4QS;vtQlob z$MMhBX&Kn;B33noUGY^Cy=Yh#rP3GJvCwTn=8t+U|-iU(i*dKjNZ%Y*LP4^#7fEQ_qz{4Jvfa4RkGyRyb`?{q@2rmkJOdCCm z$T>+9YG~Xh$wF$G&aL+XEN!vZ)w!z51s=<~b&<%NgB5KDr`LkV;Z{TA`>fPHX-|wF zZAHTa07Qi80!DbJO^PGtJj(@^{<42r_8}R|E|UUEE0{i9J`#+~Wz1;nOV& znf%!&IcZj8T7^n&=or{w*?gO4Lg>2z?>AwC^>n4Hopu}3g1%WcI67FSwJI2Fk-q> zEFO3BKE}a?m7~Ec<=FW4x1#{ooz|+V@K^9mXB7XrFk8L|G{h1kOluId{i9N0vc$Tz z?n5b(>8NKjYdAOl?riss(Fi&$c>CU_=(hn~83(oeq@`td?|Zw94@*%S(o_;Y=-#z1 zW%qQ#Z!nvv2-N`I#|nyOg}#@XThCyNFv@wmE3siGw)#;I2YDyUSe4FjQ$Ci$=yt|L zcjK7$Ev`c+(K&Z_hQf)#D~MrUgB)0cyA$6NcW4Ndoi2V2@c0kJQL~|@-|Fc zFSI#@LvXk?uz-U|^za+j+&c1G_-t!*REGnAyL#qkw->#DWIv>rj{Ka~@bJ>L*U*vY zcV762J#WXa&`t4!0k^gbW1f!6d-NtS8Qsnjd+p8@q1j6iy*`h5uxw(cG0a{qXHU5O zgD=iGDmt5C>QD&!9!$9LrY@V+mB&lw7_1TB>%OA%DkTl>oUQ<3K6yqHlIAT=e=|ER zE?L~4ZpHg;{id6F6AHGA^HmIzVzQOjNG_O_uw>oe-mzxfqR8Nh4y*QP$Sqj(E0*{I z_G?v3n~a*5$X{44k-SP=tnqCQ9m=m8A#!EwrDokl93WP8nx4@#$DRpmI+C&gPvAB< zst75z;gaId3VQ>Q`ZeN+v@I$mlpZo7vSkY0>7(3_bH;**o}&&*!X+NwX!(U#f0v7c zKwrvj-DgG5zVxOYzuFR4Ig1FRx2qDvyb93G+)oN`R7OC`*1faM`Zx6ju=kr7>@IA? zcKSJ)n7pU?G+~=uQu|09_{ZD>OYatHd_%@AINmI>AIqnEIdT|Zt$v0vN#y_mnLpEW zbu#6B31P#v`Yt#irdi3|jVA_wbmsThOK`}lOKcK#^@QRNJ-5WWSsi+HYrrZXryV+z zHyb#Nr}^<$%}>?O-D$5TR~W&by+}-?FX9TKd?knk`z@;oF=1=F_|8=Xq~wOty?2+)?D?P2!$wxO*6v>eenTnwbKGcs*vgA>*q)gA6=wve{*p;JsH{`OkM+L? zV@_2i^gx4nEB`VGY|Z;rTP*|Bt+LbnP+$vsO8@Y$-o5Bo5wLaZzvO6wa@YX|ZnP4J z^iBB7D}SjDdGD_SUHe-mIN^^3=)WZ>VjiS%fPPH=V=N3bHUsDC7V3&H*sv%mfOj|lw-|K0%C zuI)61b*ldDVYdJ6JzQ{7=|2@zkuX{+{kIpsMgY)7ZnWkl(O*{oTbX}vpud&*hmn6N z!wClaGf3%b+4wuy^ZyJsPG=eiy@c|&n2W&wJ|Y0Ph4dm}ZU0gh(%H-@>Hn{vlv-GS zc5b8hzqSzM{hy$+{yB<&cCIuQ+9@Ku2hCfVetz|@ARd4_n70yXe)#8*We}Zt&_6MH aX5{2(9XDC|NJZJwH{NYL0tD1wPyH9KL==Aj diff --git a/doc/py_tutorials/py_gui/py_image_display/py_image_display.markdown b/doc/py_tutorials/py_gui/py_image_display/py_image_display.markdown index edb957bd95..220df25525 100644 --- a/doc/py_tutorials/py_gui/py_image_display/py_image_display.markdown +++ b/doc/py_tutorials/py_gui/py_image_display/py_image_display.markdown @@ -1,153 +1,4 @@ Getting Started with Images {#tutorial_py_image_display} =========================== -Goals ------ - -- Here, you will learn how to read an image, how to display it, and how to save it back -- You will learn these functions : **cv.imread()**, **cv.imshow()** , **cv.imwrite()** -- Optionally, you will learn how to display images with Matplotlib - -Using OpenCV ------------- - -### Read an image - -Use the function **cv.imread()** to read an image. The image should be in the working directory or -a full path of image should be given. - -Second argument is a flag which specifies the way image should be read. - -- cv.IMREAD_COLOR : Loads a color image. Any transparency of image will be neglected. It is the - default flag. -- cv.IMREAD_GRAYSCALE : Loads image in grayscale mode -- cv.IMREAD_UNCHANGED : Loads image as such including alpha channel - -@note Instead of these three flags, you can simply pass integers 1, 0 or -1 respectively. - -See the code below: -@code{.py} -import numpy as np -import cv2 as cv - -# Load a color image in grayscale -img = cv.imread('messi5.jpg',0) -@endcode - -**warning** - -Even if the image path is wrong, it won't throw any error, but `print img` will give you `None` - -### Display an image - -Use the function **cv.imshow()** to display an image in a window. The window automatically fits to -the image size. - -First argument is a window name which is a string. Second argument is our image. You can create as -many windows as you wish, but with different window names. -@code{.py} -cv.imshow('image',img) -cv.waitKey(0) -cv.destroyAllWindows() -@endcode -A screenshot of the window will look like this (in Fedora-Gnome machine): - -![image](images/opencv_screenshot.jpg) - -**cv.waitKey()** is a keyboard binding function. Its argument is the time in milliseconds. The -function waits for specified milliseconds for any keyboard event. If you press any key in that time, -the program continues. If **0** is passed, it waits indefinitely for a key stroke. It can also be -set to detect specific key strokes like, if key a is pressed etc which we will discuss below. - -@note Besides binding keyboard events this function also processes many other GUI events, so you -MUST use it to actually display the image. - -**cv.destroyAllWindows()** simply destroys all the windows we created. If you want to destroy any -specific window, use the function **cv.destroyWindow()** where you pass the exact window name as -the argument. - -@note There is a special case where you can create an empty window and load an image to it later. In -that case, you can specify whether the window is resizable or not. It is done with the function -**cv.namedWindow()**. By default, the flag is cv.WINDOW_AUTOSIZE. But if you specify the flag to be -cv.WINDOW_NORMAL, you can resize window. It will be helpful when an image is too large in dimension -and when adding track bars to windows. - -See the code below: -@code{.py} -cv.namedWindow('image', cv.WINDOW_NORMAL) -cv.imshow('image',img) -cv.waitKey(0) -cv.destroyAllWindows() -@endcode -### Write an image - -Use the function **cv.imwrite()** to save an image. - -First argument is the file name, second argument is the image you want to save. -@code{.py} -cv.imwrite('messigray.png',img) -@endcode -This will save the image in PNG format in the working directory. - -### Sum it up - -Below program loads an image in grayscale, displays it, saves the image if you press 's' and exit, or -simply exits without saving if you press ESC key. -@code{.py} -import numpy as np -import cv2 as cv - -img = cv.imread('messi5.jpg',0) -cv.imshow('image',img) -k = cv.waitKey(0) -if k == 27: # wait for ESC key to exit - cv.destroyAllWindows() -elif k == ord('s'): # wait for 's' key to save and exit - cv.imwrite('messigray.png',img) - cv.destroyAllWindows() -@endcode - -**warning** - -If you are using a 64-bit machine, you will have to modify `k = cv.waitKey(0)` line as follows : -`k = cv.waitKey(0) & 0xFF` - -Using Matplotlib ----------------- - -Matplotlib is a plotting library for Python which gives you wide variety of plotting methods. You -will see them in coming articles. Here, you will learn how to display image with Matplotlib. You can -zoom images, save them, etc, using Matplotlib. -@code{.py} -import numpy as np -import cv2 as cv -from matplotlib import pyplot as plt - -img = cv.imread('messi5.jpg',0) -plt.imshow(img, cmap = 'gray', interpolation = 'bicubic') -plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis -plt.show() -@endcode -A screen-shot of the window will look like this : - -![image](images/matplotlib_screenshot.jpg) - -@note Plenty of plotting options are available in Matplotlib. Please refer to Matplotlib docs for more -details. Some, we will see on the way. - -__warning__ - -Color image loaded by OpenCV is in BGR mode. But Matplotlib displays in RGB mode. So color images -will not be displayed correctly in Matplotlib if image is read with OpenCV. Please see the exercises -for more details. - -Additional Resources --------------------- - --# [Matplotlib Plotting Styles and Features](http://matplotlib.org/api/pyplot_api.html) - -Exercises ---------- - --# There is some problem when you try to load color image in OpenCV and display it in Matplotlib. - Read [this discussion](http://stackoverflow.com/a/15074748/1134940) and understand it. +Tutorial content has been moved: @ref tutorial_display_image diff --git a/doc/py_tutorials/py_gui/py_table_of_contents_gui.markdown b/doc/py_tutorials/py_gui/py_table_of_contents_gui.markdown index 471d464b55..034aeb1b2a 100644 --- a/doc/py_tutorials/py_gui/py_table_of_contents_gui.markdown +++ b/doc/py_tutorials/py_gui/py_table_of_contents_gui.markdown @@ -1,7 +1,7 @@ Gui Features in OpenCV {#tutorial_py_table_of_contents_gui} ====================== -- @subpage tutorial_py_image_display +- @ref tutorial_display_image Learn to load an image, display it, and save it back diff --git a/doc/tutorials/introduction/display_image/display_image.markdown b/doc/tutorials/introduction/display_image/display_image.markdown index 60b6c4c3b5..ee6c200757 100644 --- a/doc/tutorials/introduction/display_image/display_image.markdown +++ b/doc/tutorials/introduction/display_image/display_image.markdown @@ -1,63 +1,82 @@ -Load and Display an Image {#tutorial_display_image} -========================= +Getting Started with Images {#tutorial_display_image} +=========================== Goal ---- In this tutorial you will learn how to: -- Load an image (using @ref cv::imread ) -- Create a named OpenCV window (using @ref cv::namedWindow ) -- Display an image in an OpenCV window (using @ref cv::imshow ) +- Read an image from file (using @ref cv::imread) +- Display an image in an OpenCV window (using @ref cv::imshow) +- Write an image to a file (using @ref cv::imwrite) Source Code ----------- -Download the source code from -[here](https://github.com/opencv/opencv/tree/3.4/samples/cpp/tutorial_code/introduction/display_image/display_image.cpp). +@add_toggle_cpp +- **Downloadable code**: Click + [here](https://github.com/opencv/opencv/tree/3.4/samples/cpp/tutorial_code/introduction/display_image/display_image.cpp) + +- **Code at glance:** + @include samples/cpp/tutorial_code/introduction/display_image/display_image.cpp +@end_toggle + +@add_toggle_python +- **Downloadable code**: Click + [here](https://github.com/opencv/opencv/tree/3.4/samples/python/tutorial_code/introduction/display_image/display_image.py) + +- **Code at glance:** + @include samples/python/tutorial_code/introduction/display_image/display_image.py +@end_toggle -@include cpp/tutorial_code/introduction/display_image/display_image.cpp Explanation ----------- -In OpenCV 2 we have multiple modules. Each one takes care of a different area or approach towards +@add_toggle_cpp +In OpenCV 3 we have multiple modules. Each one takes care of a different area or approach towards image processing. You could already observe this in the structure of the user guide of these tutorials itself. Before you use any of them you first need to include the header files where the content of each individual module is declared. You'll almost always end up using the: -- *core* section, as here are defined the basic building blocks of the library -- *highgui* module, as this contains the functions for input and output operations +- @ref core "core" section, as here are defined the basic building blocks of the library +- @ref imgcodecs "imgcodecs" module, which provides functions for reading and writing +- @ref highgui "highgui" module, as this contains the functions to show an image in a window + +We also include the *iostream* to facilitate console line output and input. + +By declaring `using namespace cv;`, in the following, the library functions can be accessed without explicitly stating the namespace. @snippet cpp/tutorial_code/introduction/display_image/display_image.cpp includes +@end_toggle -We also include the *iostream* to facilitate console line output and input. To avoid data structure -and function name conflicts with other libraries, OpenCV has its own namespace: *cv*. To avoid the -need appending prior each of these the *cv::* keyword you can import the namespace in the whole file -by using the lines: +@add_toggle_python +As a first step, the OpenCV python library is imported. +The proper way to do this is to additionally assign it the name *cv*, which is used in the following to reference the library. -@snippet cpp/tutorial_code/introduction/display_image/display_image.cpp namespace +@snippet samples/python/tutorial_code/introduction/display_image/display_image.py imports +@end_toggle -This is true for the STL library too (used for console I/O). Now, let's analyze the *main* function. -We start up assuring that we acquire a valid image name argument from the command line. Otherwise -take a picture by default: "HappyFish.jpg". +Now, let's analyze the main code. +As a first step, we read the image "starry_night.jpg" from the OpenCV samples. +In order to do so, a call to the @ref cv::imread function loads the image using the file path specified by the first argument. +The second argument is optional and specifies the format in which we want the image. This may be: -@snippet cpp/tutorial_code/introduction/display_image/display_image.cpp load +- IMREAD_COLOR loads the image in the BGR 8-bit format. This is the **default** that is used here. +- IMREAD_UNCHANGED loads the image as is (including the alpha channel if present) +- IMREAD_GRAYSCALE loads the image as an intensity one -Then create a *Mat* object that will store the data of the loaded image. - -@snippet cpp/tutorial_code/introduction/display_image/display_image.cpp mat - -Now we call the @ref cv::imread function which loads the image name specified by the first argument -(*argv[1]*). The second argument specifies the format in what we want the image. This may be: - -- IMREAD_UNCHANGED (\<0) loads the image as is (including the alpha channel if present) -- IMREAD_GRAYSCALE ( 0) loads the image as an intensity one -- IMREAD_COLOR (\>0) loads the image in the RGB format +After reading in the image data will be stored in a @ref cv::Mat object. +@add_toggle_cpp @snippet cpp/tutorial_code/introduction/display_image/display_image.cpp imread +@end_toggle + +@add_toggle_python +@snippet samples/python/tutorial_code/introduction/display_image/display_image.py imread +@end_toggle @note OpenCV offers support for the image formats Windows bitmap (bmp), portable image formats (pbm, @@ -67,42 +86,38 @@ Now we call the @ref cv::imread function which loads the image name specified by Jasper), TIFF files (tiff, tif) and portable network graphics (png). Furthermore, OpenEXR is also a possibility. -After checking that the image data was loaded correctly, we want to display our image, so we create -an OpenCV window using the @ref cv::namedWindow function. These are automatically managed by OpenCV -once you create them. For this you need to specify its name and how it should handle the change of -the image it contains from a size point of view. It may be: +Afterwards, a check is executed, if the image was loaded correctly. +@add_toggle_cpp +@snippet cpp/tutorial_code/introduction/display_image/display_image.cpp empty +@end_toggle -- *WINDOW_AUTOSIZE* is the only supported one if you do not use the Qt backend. In this case the - window size will take up the size of the image it shows. No resize permitted! -- *WINDOW_NORMAL* on Qt you may use this to allow window resize. The image will resize itself - according to the current window size. By using the | operator you also need to specify if you - would like the image to keep its aspect ratio (*WINDOW_KEEPRATIO*) or not - (*WINDOW_FREERATIO*). +@add_toggle_python +@snippet samples/python/tutorial_code/introduction/display_image/display_image.py empty +@end_toggle -@snippet cpp/tutorial_code/introduction/display_image/display_image.cpp window - -Finally, to update the content of the OpenCV window with a new image use the @ref cv::imshow -function. Specify the OpenCV window name to update and the image to use during this operation: - -@snippet cpp/tutorial_code/introduction/display_image/display_image.cpp imshow +Then, the image is shown using a call to the @ref cv::imshow function. +The first argument is the title of the window and the second argument is the @ref cv::Mat object that will be shown. Because we want our window to be displayed until the user presses a key (otherwise the program would end far too quickly), we use the @ref cv::waitKey function whose only parameter is just how long should it wait for a user input (measured in milliseconds). Zero means to wait forever. +The return value is the key that was pressed. -@snippet cpp/tutorial_code/introduction/display_image/display_image.cpp wait +@add_toggle_cpp +@snippet cpp/tutorial_code/introduction/display_image/display_image.cpp imshow +@end_toggle -Result ------- +@add_toggle_python +@snippet samples/python/tutorial_code/introduction/display_image/display_image.py imshow +@end_toggle -- Compile your code and then run the executable giving an image path as argument. If you're on - Windows the executable will of course contain an *exe* extension too. Of course assure the image - file is near your program file. - @code{.sh} - ./DisplayImage HappyFish.jpg - @endcode -- You should get a nice window as the one shown below: +In the end, the image is written to a file if the pressed key was the "s"-key. +For this the cv::imwrite function is called that has the file path and the cv::Mat object as an argument. - ![](images/Display_Image_Tutorial_Result.jpg) +@add_toggle_cpp +@snippet cpp/tutorial_code/introduction/display_image/display_image.cpp imsave +@end_toggle -@youtube{1OJEqpuaGc4} +@add_toggle_python +@snippet samples/python/tutorial_code/introduction/display_image/display_image.py imsave +@end_toggle diff --git a/doc/tutorials/introduction/images/Load_Save_Image_Result_1.jpg b/doc/tutorials/introduction/images/Load_Save_Image_Result_1.jpg deleted file mode 100644 index fcc7afa4e349752df117b1a75d4f739ff2684abc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19591 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 U2(|AqzY?E72m=H2f%N}30ZI)&ga7~l diff --git a/doc/tutorials/introduction/load_save_image/load_save_image.markdown b/doc/tutorials/introduction/load_save_image/load_save_image.markdown index ad452378d1..9f37538b7d 100644 --- a/doc/tutorials/introduction/load_save_image/load_save_image.markdown +++ b/doc/tutorials/introduction/load_save_image/load_save_image.markdown @@ -1,105 +1,4 @@ Load, Modify, and Save an Image {#tutorial_load_save_image} =============================== -@note - We assume that by now you know how to load an image using @ref cv::imread and to display it in a - window (using @ref cv::imshow ). Read the @ref tutorial_display_image tutorial otherwise. - -Goals ------ - -In this tutorial you will learn how to: - -- Load an image using @ref cv::imread -- Transform an image from BGR to Grayscale format by using @ref cv::cvtColor -- Save your transformed image in a file on disk (using @ref cv::imwrite ) - -Code ----- - -Here it is: -@code{.cpp} -#include - -using namespace cv; - -int main( int argc, char** argv ) -{ - char* imageName = argv[1]; - - Mat image; - image = imread( imageName, IMREAD_COLOR ); - - if( argc != 2 || !image.data ) - { - printf( " No image data \n " ); - return -1; - } - - Mat gray_image; - cvtColor( image, gray_image, COLOR_BGR2GRAY ); - - imwrite( "../../images/Gray_Image.jpg", gray_image ); - - namedWindow( imageName, WINDOW_AUTOSIZE ); - namedWindow( "Gray image", WINDOW_AUTOSIZE ); - - imshow( imageName, image ); - imshow( "Gray image", gray_image ); - - waitKey(0); - - return 0; -} -@endcode -Explanation ------------ - --# We begin by loading an image using @ref cv::imread , located in the path given by *imageName*. - For this example, assume you are loading a BGR image. --# Now we are going to convert our image from BGR to Grayscale format. OpenCV has a really nice - function to do this kind of transformations: - @code{.cpp} - cvtColor( image, gray_image, COLOR_BGR2GRAY ); - @endcode - As you can see, @ref cv::cvtColor takes as arguments: - - - a source image (*image*) - - a destination image (*gray_image*), in which we will save the converted image. - - an additional parameter that indicates what kind of transformation will be performed. In - this case we use **COLOR_BGR2GRAY** (because of @ref cv::imread has BGR default channel - order in case of color images). - --# So now we have our new *gray_image* and want to save it on disk (otherwise it will get lost - after the program ends). To save it, we will use a function analogous to @ref cv::imread : @ref - cv::imwrite - @code{.cpp} - imwrite( "../../images/Gray_Image.jpg", gray_image ); - @endcode - Which will save our *gray_image* as *Gray_Image.jpg* in the folder *images* located two levels - up of my current location. - --# Finally, let's check out the images. We create two windows and use them to show the original - image as well as the new one: - @code{.cpp} - namedWindow( imageName, WINDOW_AUTOSIZE ); - namedWindow( "Gray image", WINDOW_AUTOSIZE ); - - imshow( imageName, image ); - imshow( "Gray image", gray_image ); - @endcode --# Add the *waitKey(0)* function call for the program to wait forever for an user key press. - -Result ------- - -When you run your program you should get something like this: - -![](images/Load_Save_Image_Result_1.jpg) - -And if you check in your folder (in my case *images*), you should have a newly .jpg file named -*Gray_Image.jpg*: - -![](images/Load_Save_Image_Result_2.jpg) - -Congratulations, you are done with this tutorial! +Tutorial content has been moved: @ref tutorial_display_image diff --git a/doc/tutorials/introduction/table_of_content_introduction.markdown b/doc/tutorials/introduction/table_of_content_introduction.markdown index b6dc8bd48b..0f711427ef 100644 --- a/doc/tutorials/introduction/table_of_content_introduction.markdown +++ b/doc/tutorials/introduction/table_of_content_introduction.markdown @@ -144,19 +144,13 @@ Additionally you can find very basic sample source code to introduce you to the - @subpage tutorial_display_image - _Compatibility:_ \> OpenCV 2.0 + _Languages:_ C++, Python + + _Compatibility:_ \> OpenCV 3.4.4 _Author:_ Ana Huamán - We will learn how to display an image using OpenCV - -- @subpage tutorial_load_save_image - - _Compatibility:_ \> OpenCV 2.0 - - _Author:_ Ana Huamán - - We will learn how to save an Image in OpenCV...plus a small conversion to grayscale + We will learn how to read an image, display it in a window and write it to a file using OpenCV - @subpage tutorial_documentation diff --git a/samples/cpp/tutorial_code/introduction/display_image/display_image.cpp b/samples/cpp/tutorial_code/introduction/display_image/display_image.cpp index 80151ec8a9..417fc0d448 100644 --- a/samples/cpp/tutorial_code/introduction/display_image/display_image.cpp +++ b/samples/cpp/tutorial_code/introduction/display_image/display_image.cpp @@ -4,48 +4,36 @@ #include #include + +using namespace cv; //! [includes] -//! [namespace] -using namespace cv; -using namespace std; -//! [namespace] - - -int main( int argc, char** argv ) +int main() { - //! [load] - String imageName( "HappyFish.jpg" ); // by default - if( argc > 1) - { - imageName = argv[1]; - } - //! [load] - - //! [mat] - Mat image; - //! [mat] - //! [imread] - image = imread( samples::findFile( imageName ), IMREAD_COLOR ); // Read the file + std::string image_path = samples::findFile("starry_night.jpg"); + Mat img = imread(image_path, IMREAD_COLOR); //! [imread] - if( image.empty() ) // Check for invalid input + //! [empty] + if(img.empty()) { - cout << "Could not open or find the image" << std::endl ; - return -1; + std::cout << "Could not read the image: " << image_path << std::endl; + return 1; } - - //! [window] - namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display. - //! [window] + //! [empty] //! [imshow] - imshow( "Display window", image ); // Show our image inside it. + imshow("Display window", img); + int k = waitKey(0); // Wait for a keystroke in the window //! [imshow] - //! [wait] - waitKey(0); // Wait for a keystroke in the window - //! [wait] + //! [imsave] + if(k == 's') + { + imwrite("starry_night.png", img); + } + //! [imsave] + return 0; } diff --git a/samples/python/tutorial_code/introduction/display_image/display_image.py b/samples/python/tutorial_code/introduction/display_image/display_image.py new file mode 100644 index 0000000000..404d2839b0 --- /dev/null +++ b/samples/python/tutorial_code/introduction/display_image/display_image.py @@ -0,0 +1,19 @@ +## [imports] +import cv2 as cv +import sys +## [imports] +## [imread] +img = cv.imread(cv.samples.findFile("starry_night.jpg")) +## [imread] +## [empty] +if img is None: + sys.exit("Could not read the image.") +## [empty] +## [imshow] +cv.imshow("Display window", img) +k = cv.waitKey(0) +## [imshow] +## [imsave] +if k == ord("s"): + cv.imwrite("starry_night.png", img) +## [imsave]