From 4b2bb43c620627a56f98ccbf514374cfb66b73bd Mon Sep 17 00:00:00 2001 From: jeena Date: Tue, 8 Oct 2013 08:18:27 +0200 Subject: [PATCH] initial commit --- cat.png | Bin 0 -> 6402 bytes cat2.png | Bin 0 -> 6110 bytes dog.png | Bin 0 -> 6668 bytes dog2.png | Bin 0 -> 5856 bytes find_lines.py | 42 +++++++++++++++++++++++++++++++++++++ test.png | Bin 0 -> 1352 bytes test.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 99 insertions(+) create mode 100644 cat.png create mode 100644 cat2.png create mode 100644 dog.png create mode 100644 dog2.png create mode 100755 find_lines.py create mode 100644 test.png create mode 100644 test.py diff --git a/cat.png b/cat.png new file mode 100644 index 0000000000000000000000000000000000000000..2950f50f672afaa1db970d87371b19f5b75d693a GIT binary patch literal 6402 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 QVgLXD07*qoM6N<$f^0cWssI20 literal 0 HcmV?d00001 diff --git a/cat2.png b/cat2.png new file mode 100644 index 0000000000000000000000000000000000000000..159fd27c4e33c45e55975ebce74d81146808a906 GIT binary patch literal 6110 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 literal 0 HcmV?d00001 diff --git a/dog.png b/dog.png new file mode 100644 index 0000000000000000000000000000000000000000..189cf78dfb49aa8defed27ade321da96a100adf1 GIT binary patch literal 6668 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

Dwb z7a|AS=^TG-aMM;{ zGxpw1VQVCNNMwz^rqxYbB|N^`sQ`Id?!68_CnQiR2B((UNOA-u?Y(=#3~qNj9rbQ^ z=NCILHwSn-mL*DK1r|ivDdy^IB4iGDxWxX-hgVTtq|VEoKR{3dLf1I(5FFe9fMiev zt`uHC02%=LFvlVJ7|=k*Z`J@ql2qpCVT^0ZZru$wmc-_Zr(e5^vEe*?R#Hp@-ga?hoR~?^217?U(AfrV5ya6PWFiGmjB2M_1t-^L?%d7t%vY9= zj{5|C@N>mbQn5k_B@%u|yL`4J5E0MEBzDFyiObzR>_iHa_*elsK=q zcpCy@x)w^|YJYqFZn|2YeE#O|eB%10IVp9S@M?Xww(g;(*zHzMI;RjArenYBnLtYS zoK9n=Sf=5`?VZjtrl=(tCp$9mNAKBBn$ZtqZocQ=?Z27amZI!i@O(C#a}>()1m3r3 zEK%6@ld^H17Hr;58?7IjXn~7>uR88;aB#GU5zmbsfYiFTbSyHkyTb22`V!t)0f{Aq zWjSEUX|9M!SYRMd;MWm%A!Mv@izm8gR7vxwc19mZ9T}(7&S9)Cr7pvG0rp<6)9Gq# z&4{0>%?D9Qx4LX$FF5ayDfmM#ExUg`{f7TD7~;(CVWPJIT>d`It{Jv*Q#Hg(mRq`G6wY8i3cBDAX3 zNzYEZlLmH)*h!d(3K&AMn8p`JyFRYTIhEkln&{(}x(RLX7Lt8e%b3x&F!ogfIh$=Z zV#hun!{q7RAk8*|`Fy}DuYe!^M70b6XpI`~fZ)smEs31$C}#IQh>(3pYqa9xoKAxS zN~)f`lj0Q4Ek3J)2K7df#kR7f;-Ns+cCdO)R8Sea6!8c=oL^$bg3U{wDnLL6*gbSC zH6V;jJJKS{Dg4A-c@csL=(dpJ6c}3p)5pBtmf+m%(I~>4mhu)2h6&Rda-K!Qj?Elo zq^EYio>5C?>PbzWB?S`?lZVgRlbPPRv2$u>^3-#Ob-|fobEb?Y4Isn}0**&tk@eKZ z1Ws5TwPQ^dT3JeLkCcNoj;Wo4GYG>%?IH*KCvD2Y`@oK~itGZ`CZvT5|N1+g}t^^F|d3>-FRdE_x-=x3VJ zw5yy=^)UpiV$Q1z#l@he$;DK{YoaoZx=usfO($-mI-`gS7mhkD-MwpeLzq;^m`1+$VV9;pR{}BCF=#YLw&4^& zp$nUi1RR^(w99=?AmzHbtVx&i9q1~vdLX)!N3#lwG;XUTkLn#k;2mir1^sAmyROx` z;BQ;-fu^MfOJv0=7Mt90=ets7yP$ zd8%1VZ+laLPr9R$4~(d0ko7o z%XVUta>^;!{XA#yz1}tFn3INo!DtN)J>!u-NTpP$m!NW)+3YCMR7#;00SL{zB9&62 zsfJ|`MWPH~c1Qz|*#N0lFpL5OrhsKrGU10p1tmHBeks zg*g<|gaWb*K%!HXRzQh1EjxrtD6wpfc5s7;!r_A!NH`2eU8u_DlBwMtXaKBxFB2sa z6jtgITV`d;KzNr#jg}Asnbbt0QGtM!qpWD8gcv9Z4%KN2qSC!*1DMdvzD$&+QfdGi zY_?2Gz|_?!cTFr53J6zSm9r|Uyb6grR49a_KooC)n*vH*fkG5&@V>QL3ZN1YlW~Z|W)>=|ePt@(vj+fvX$U z8ek{zB&mYFRp&?#z~BFc<1+|3IFnrkZASpYS=m##(- zQVyYoQ4f?vQy7k32|KM93vK|rXm~FulFY53No`tbM%d|_^X+Y;0R~9*gwZ6CYC`+Z zDV`)LAtj+!3S*JTfFxx~CKAn~YcX_53Mv4A8Uk8c$-n&xzZo}`iV{@9f?*|%m4c>@ z9*JrM0dO@Yyqi>ZMAC5UfVE{fU^LfCz@jptCWJ97zxV2mzWug+$jYt&Sdd<+0qLMJ zaTJNDRFX&%QaOW!{KlTBURA6fRV*yHqarL9H5~_hGJ*f4z)!vlpy!d8L?WS-tO;oT zA~!uXg+MK?7+`wM`Cc`7Y4h_p5)!b4 zWo5yrLZxPa*3wBbEUH2wnKg3YrT@jN31+f_<$g=5RwN;O*tJh@`U;R^nD3IP$S29^;jlGi#$SgO-(-CU>j<=`6 ztV$TQ7*(|>Mf*>|5SK(*E6pV-V57#!Prqb5fB)~Lz)WfZiE=^Qd8A~hi;mC*5GT>2yC%E6>eJgslUli~z~RuOH6)Flw{G4voZ39SXVJ#fw4QIzQ*>`0jy37OY_EsRAPho)mg+7Y+0q{>CJkv zoR7x>9k2W8n-_lh^@NJbl_z4$Tx)$8v;$fZ+NsaiePUIEW*I=k>a9f@mnP84JVg88 zN=>Cc{zE5hWehs?(^vT0D+YT)3AcNfX;yryW6Q$qC}XGm=(qorgelo1AV|yA3RIe` z!GuT!kU+GEk6x!Hh+UZWgZ;0+G}64r+!BY`(&n-({_e9c(hTV$vxnO8<4=E9hBQIg z(bM2|H-X#fT3H06#>-!N@^$w~1hDP|55NO@xAf;a$YA&j5YW>Epv4~;pUMLP_jS#Xi|jVUut7k2yQzn+M!@R?2!=mUAr zq!1vl`8M;=Od+H&^O&2bI~n0=&0)VM&_o3~TLe5v9nSit*9vgNc&PQ2sh1vojT}so zqC}chiEDb_o!46*o;>cFQdnEfG@yXi;i}|%XE*s!3FOZ) zjR&wVb9JD**JK=S`>PAR#rgi0C@EcF%<$sZ53F3r!C>i@8U-K@>Jm@&!?XLXtiMje zNZNOPly(K&d7Fzsy28yuef_>YgF2i4L@k1O7C-><>ATMQMek%jEluDcLzh$`8HbWc z`TlgJZc?8vfK@=h4>b#F<%E-~+xhiVV)C%BzH_f6bEWFxX83SPYA~lTN7M8}ZABdR z)b7*7uL9U{>3?%+kGEuQ8Ka{`69vOOa4Pb8a6BwxE+)BGZhze~J6a zd;#-(Px_YQkIIT&Z;vx+huVkJ4oxeY`{}ylZy!Ds&A~3}HvAtSZ+m8Rz4f6AI8F>@ zbW_n#@w|P247%hW_T|OBA{K9q#H}zYmbPLyX7frs zJ5od9adB+nBU#!OU;K?k(JS|KGh{05@rU1x`*ZHnI1-6MJYH!qxw#-cD zg-SqhA{TY|mIL`jd_mskLF=rWv?d$ZoguKkCL4~~S_;7iq*&r!=^rP(8W6U5KJ&1y zZJ~Tys%I!7>;g+V)bMrYug}xR{>4AhcC45p znLD9pSl-)ApP)Xi>k7y<#JHaG11{Qc0#eH&)Q%*rY{2g2lWR{<=h9Xz?KNVPMy~m8 zzlKF17HY_d>o%EXP=PCs+y&M5P0dca-EJ-yOxktUNT+|odC>2-@L34N20ti%oe3Oi zI!hBv@v|{)YYV2B%zYl}J+Yu}+I3?cPEFW|BSv2u(X-Ik-RR4lH`i=3#g^tg7`?Wx zaAB;PvQB4-o4@{#E~5lEQakszv1)P&P|#&?t4jKvVMVR}4c}p+=}}e}8XrN-r8K*; z#f^|Ov+mhAtK!X5srCC$v8L$I14w-A*1Dzv=u|^kZ>?rcF?6uuA8>6UGA&pk(;_t87ppkORMAgdrcQRe)0EQi>uito(|0<6T2C9vEF5` z0o@AVz8!(*uP$mN0ol0e=KF}H8Y`ZfP!*o{@Bnb)pMS@Za$kj*r)FfG*v7lXD zl-ULIury45<+N=r9=YdWcA!s}q;CpBwt8w~ zj=a{KN84=@S&#!$yOIa~;@|x6a1-%l4qHr5>QKALD}w7Xj^0bL&Vr6{vf+cb2>1)1 zy1gM8^gMIrQTxJWf4;VKTqY|BJFt|*pZ%8)zF6P=N{T661uN5jE0q;y_fySLmbyC* z)3vfO-#jk0`_Frw-e$IFS~&OGw5%P=CDX3#_s2I~(bQ}7&cFNjybFHyhXbt?DXp>W z*Qi;WmsiEn^BNy59Q&f;j&Hd4TyH+Q>Qzne*6%7A-HFQX%xc;s)qeJ(Www$uSNxd2 z`LBNIe+aB+k2G%(`!y!nQ$@-oEt1RSFxPdqFNfSL^IPvvI6)zewV`sj(aIG4V3W#+ zZ5>@&XohNX{p^Qdl_n8LHI;Dt9ig031wo5~_C6sY(i^L{*>jEUepud%Lk~7tlA4K7 z8E90+R(3sWL3VND>N_QIh9Fy*XhH3_6j`Q0Mc#v%Bu?cj?@t-X>?8Y-n_7P!g568K zMK(}6bG216{c&n_$kF1ck1uyQSQD4|3*XzrQz8vY}>-GAi zoC4jeIW*T%tDmm7N!w95Cj8*MyNjvO(#6A7hjpTIn2KpyZF2%q57(*TAAd3~pEcwG zt_58A@)OMc+|BRqhEtyH35&j+w}=gw)8CnzpV(2byd-c2LG0sX(v01HXJ&X|msS0# zx(aPR2cG57Oxb$%*Ds%c`zKa_wP%(7K*$p89MW8}WNh9CYe2M+*~%~tO(eox*T|)$ zqk$i);5fI2IIcdANdJXLxE-Ikef0sJeDgvxyvSNt0Hrc(g-g zwJJsjU0XFztt=ABlo$Ps_YO{s!w*F+?uNY2?(rFOz28y~m!wac6&^K{==-;Ro-sHR z{XnlSb?g;|o>ak_H+$5fDHbLji*2@Q)cEhM0YcTYiDoPTMzq}NZD7=5Eflzc#fnE&sHHvyJu3XK6+d2)W3d6 zZI#+$6(VkJ^*H^X&#l>sv~x-hOP=OwN!IRy@X=bRWy8GemNQ59hLsw!^%|FkrrmKu zm;UaA@v_ZN6#f4E!o_Tm_u&Y>cq|oT;5!J={|CIgQ-jy;`@f=`s|)9?X38rgP-}=G+w_ts1OSImT#NBGRn+=9XGoC40++ znsv`*yLC0Temx@IXzSaHiyrE#SAC*pUE4}~_Zqod(lAfgT+f^#nud8I%pF)cAjp@=lKXVv8$J{P5~-FUo=xnIESQ8N>@*{yQ=U zwE-a#2XNmJX8RJ$4jqc>DwQOrbnY8b$jxIy(d76r)@@vSS~D}VwXa$Gloyo7cXhTb z#EXxcwz}+StLY>VvH$={XqGHp1~maHx2Ce?^aeE}itaUD5#76E@QS^^|Md^H3+(>E zap-3#(lt)Ju3OG}-kmA+oSsHy8d%&@G0`2}VEGrwat1aF2 z*kL-oVqf*5`|5X>N4@O#XR{Tbe(@`h-53N-mm$#(NfaPT0|&i!Ku2bAop-TDoBeA0 z9G0Cv-tVgtcWLk?>3RF?X&aVj?2Gqd2ebXr$(^^Se(OfzSvlEi@90?6wRbd21C?+f zBR-I@T`EAg^sW22TNd(u@bN*<3VU~XeZFqu6Gv|23~uo`jCQHBWVKwj)6A?}4jaI2 z5y+LM(je@;T^c$=aa?WKu5y9dlS#M!m>loYz3$)tVqLNt8^&>elG9&)Zz|9@PWHIR z*^{TfPb@Q-XKz3dzKizQm@MsZckt+Y)ls9bo%_zvb|erVF9gQl{Qgg&NA_)dG&|!Z z9})pEa?OmVUWysrktM5?p4AYYWxv+sq6o>*uqqRlSGo)@5m!Gdq7L&Mrg{C9pKp4O zs_Uc6!ykXYwN|&8Lm! zb$DZycz^j+iM{IV`{~dBxr<3!N;~ACFR>P9Uh38oz$UU|cvq+C8Y=^UVPU8$HgI?2 zHs9Kfg+7E@4@Z{nm($;W{KL2D_~hrx|LHzjYj9x2Kpd! z2vCL+FBALSv}&ojD!3gY!se^r9R@qysQJ(VmuQ~H^WHS?k9_gxAN}d)->xB1Jl&e8 zjaJiomW@SedTV7=EAKpImD1ddk`>W!wF-C+MC(`v-%a|&>$i^>-S(b_KJBaP^+|rc z@xg}3BhL3?!gQ}P)%R?;^R!WVN~nleQ~N>hLF!V4ZCgRFvKI>Xv6o6$gYe9}VHcdR zQLyhn=Xq_rq-S=W+^i(4PLb(t?fV859Cm_+NW(_^ot9~B%Appaj(|tyo%<=aWmO-{ zo66Z+EU}>ss$VoeemwAe<~|Y-2K%Uebw%6LSS2Ps8x)cXwcpD!91TDG`J@51*(`gLoR)@;)Pk^QgQyQ$ zxfTaopH=jLLshp)m|*2Tv!)o2O?KXzC#$)}NXyL>VH-B2g{o}bT+ikcxh@c~-duMy z1$HZNAos**H$7i$Z!XdVN$!{!9ol=BJ31hQ*=5QI55J~1Yu#?OZ#K6hu1x1u5zWU2 zAWYo?(-)gyrJ{!QhJ25tf><|Ids2)Lv~5_)j&o|Si&vrC!2b_bz&uoPvrer=TV@S|zZ~&+Pr)?jxG4eXuDz)U+$D q4V;io4I(-K+zn|}m3?orZT}xX*Bv9BP_d2x0000 1: + fn = sys.argv[1] + print 'loading %s ...' % fn + img1 = cv2.imread(fn, 0) + img = cv.LoadImage(fn, cv.CV_LOAD_IMAGE_GRAYSCALE) + size = cv.GetSize(img) + + temp = cv.CreateImage(size, img.depth, img.nChannels) + print temp + cv.Smooth(img, temp) + + canny = cv2.Canny(temp, 50, 100) + color_dst = cv2.cvtColor(canny, cv2.COLOR_GRAY2BGR) + lines = cv2.HoughLinesP(canny, 1, pi/90, 20, np.array([]), 5) + + try: + for line in lines[0]: + cv2.line(color_dst, (line[0], line[1]), (line[2], line[3]), cv.RGB(255,0,0), 1, 8) + except: + pass + + print lines[0].size + + cv2.namedWindow("Original") + cv2.imshow("Original", img) + + cv2.namedWindow('Lines image') + cv2.imshow('Lines image', color_dst) + + cv2.waitKey() + + +else: + print "Please give a image path" \ No newline at end of file diff --git a/test.png b/test.png new file mode 100644 index 0000000000000000000000000000000000000000..7a8bc311b21c7b104dd6b1ecc3fcf5cbc2bbea1c GIT binary patch literal 1352 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV4T3g1Qgjg(XEJqftBCW#WAGf*4yibTn!8Y z%m-cm{Ga}qUB}fW?UeRqo$I-b4EIWBFfg!4fRI1}2stz`0uciv8wf!p21f43>dP$i zuYUWs@2mxb9h$q~PQ&76ymDrY3>*d^q;LR)8W@;?h=GX*gdh?lSq>5?*u!OH$UzbW zdYXXveWb|E9@qlmf#lsZR)!CZ7&#M`0@Z+}98&2-Y!T3)a*{RrDvxx|)8gTe~DWM4fXavL6 literal 0 HcmV?d00001 diff --git a/test.py b/test.py new file mode 100644 index 0000000..8bffdcc --- /dev/null +++ b/test.py @@ -0,0 +1,57 @@ +#!/usr/bin/python +# This is a standalone program. Pass an image name as a first parameter of the program. + +import sys +from math import sin, cos, sqrt, pi +import cv +import urllib2 + +# toggle between CV_HOUGH_STANDARD and CV_HOUGH_PROBILISTIC +USE_STANDARD = True + +if __name__ == "__main__": + if len(sys.argv) > 1: + filename = sys.argv[1] + src = cv.LoadImage(filename, cv.CV_LOAD_IMAGE_GRAYSCALE) + else: + url = 'https://code.ros.org/svn/opencv/trunk/opencv/doc/pics/building.jpg' + filedata = urllib2.urlopen(url).read() + imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1) + cv.SetData(imagefiledata, filedata, len(filedata)) + src = cv.DecodeImageM(imagefiledata, cv.CV_LOAD_IMAGE_GRAYSCALE) + + + cv.NamedWindow("Source", 1) + cv.NamedWindow("Hough", 1) + + while True: + dst = cv.CreateImage(cv.GetSize(src), 8, 1) + color_dst = cv.CreateImage(cv.GetSize(src), 8, 3) + storage = cv.CreateMemStorage(0) + lines = 0 + cv.Canny(src, dst, 50, 200, 3) + cv.CvtColor(dst, color_dst, cv.CV_GRAY2BGR) + + if USE_STANDARD: + lines = cv.HoughLines2(dst, storage, cv.CV_HOUGH_STANDARD, 1, pi / 180, 100, 0, 0) + for (rho, theta) in lines[:100]: + a = cos(theta) + b = sin(theta) + x0 = a * rho + y0 = b * rho + pt1 = (cv.Round(x0 + 1000*(-b)), cv.Round(y0 + 1000*(a))) + pt2 = (cv.Round(x0 - 1000*(-b)), cv.Round(y0 - 1000*(a))) + cv.Line(color_dst, pt1, pt2, cv.RGB(255, 0, 0), 3, 8) + else: + lines = cv.HoughLines2(dst, storage, cv.CV_HOUGH_PROBABILISTIC, 1, pi / 180, 50, 50, 10) + for line in lines: + cv.Line(color_dst, line[0], line[1], cv.CV_RGB(255, 0, 0), 3, 8) + + cv.ShowImage("Source", src) + cv.ShowImage("Hough", color_dst) + + k = cv.WaitKey(0) % 0x100 + if k == ord(' '): + USE_STANDARD = not USE_STANDARD + if k == 27: + break