{"id":6560,"date":"2019-04-01T09:01:48","date_gmt":"2019-04-01T00:01:48","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=6560"},"modified":"2020-05-28T12:31:51","modified_gmt":"2020-05-28T03:31:51","slug":"python%ea%b3%bc-opencv-14-%ec%9d%b4%eb%af%b8%ec%a7%80-%ed%94%bc%eb%9d%bc%eb%af%b8%eb%93%9cimage-piramid","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=6560","title":{"rendered":"Python\uacfc OpenCV \u2013 14 : \uc774\ubbf8\uc9c0 \ud53c\ub77c\ubbf8\ub4dc(Image Piramid)"},"content":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_imgproc\/py_pyramids\/py_pyramids.html#pyramids \uc785\ub2c8\ub2e4.<\/p>\n<p>\ub3d9\uc77c\ud55c \uc601\uc0c1\uc5d0 \ub300\ud574\uc11c \uc774\ubbf8\uc9c0\uc758 \ud06c\uae30\ub97c 50% \ud06c\uae30\ub9cc\ud07c \uc5f0\uc18d\uc801\uc73c\ub85c \uc904\uc774\uac70\ub098 \ub298\ub824 \uc0dd\uc131\ub41c \uc774\ubbf8\uc9c0 \uc9d1\ud569\uc744 \uc774\ubbf8\uc9c0 \ud53c\ub77c\ubbf8\ub4dc\ub77c\uace0 \ud569\ub2c8\ub2e4. OpenCV\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc774\ubbf8\uc9c0 \ud53c\ub77c\ubbf8\ub4dc \uad00\ub828 \ud568\uc218\ub294 cv2.pyrDown\uacfc cv2.pryUp \uc778\ub370, cv2.pyrDown \ud568\uc218\ub294 \uc785\ub825 \uc774\ubbf8\uc9c0\ub97c 50% \ud06c\uae30\ub85c \uc904\uc778 \uc774\ubbf8\uc9c0\ub97c \uc0dd\uc131\ud574 \ubc18\ud658\ud558\uace0 cv2.pryUp\uc740 \uc785\ub825 \uc774\ubbf8\uc9c0\ub97c 200% \ud06c\uae30\ub85c \ud655\ub300\ud55c \uc774\ubbf8\uc9c0\ub97c \uc0dd\uc131\ud574 \ubc18\ud658\ud569\ub2c8\ub2e4. \uba3c\uc800 cv2.pryDown \ud568\uc218\uc758 \uc608\ub97c \uc0b4\ud3b4\ubcf4\uba74..<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport cv2\r\n\r\nimg0 = cv2.imread('.\/data\/apple.jpg')\r\nimg1 = cv2.pyrDown(img0)\r\nimg2 = cv2.pyrDown(img1)\r\nimg3 = cv2.pyrDown(img2)\r\n\r\ncv2.imwrite('img0.jpg', img0)\r\ncv2.imwrite('img1.jpg', img1)\r\ncv2.imwrite('img2.jpg', img2)\r\ncv2.imwrite('img3.jpg', img3)\r\n<\/pre>\n<p>\uc704\uc758 \uc608\uc81c\uc5d0\uc11c apple.jpg \uc774\ubbf8\uc9c0\ub294 512&#215;512 \ud06c\uae30\uc758 \uc774\ubbf8\uc9c0\uc778\ub370, img1\uc740 256&#215;256\uc73c\ub85c.. img2\ub294 128&#215;128\uc73c\ub85c.. img3\ub294 64&#215;64\ub85c \ud06c\uae30\uac00 \ucd95\uc18c\ub41c \uc774\ubbf8\uc9c0\uac00 \uc800\uc7a5\ub429\ub2c8\ub2e4. \ub2e4\uc74c\uc740 cv2.pryUp \ud568\uc218\uc5d0 \ub300\ud55c \uc608\uc81c\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport cv2\r\n\r\nimg0 = cv2.imread('.\/data\/apple.jpg')\r\nimg1 = cv2.pyrUp(img0)\r\nimg2 = cv2.pyrUp(img1)\r\nimg3 = cv2.pyrUp(img2)\r\n\r\ncv2.imwrite('img0.jpg', img0)\r\ncv2.imwrite('img1.jpg', img1)\r\ncv2.imwrite('img2.jpg', img2)\r\ncv2.imwrite('img3.jpg', img3)\r\n<\/pre>\n<p>\uc704\uc758 \uc608\uc81c \uc5ed\uc2dc \uc720\uc0ac\ud558\uac8c apple.jpg \uc774\ubbf8\uc9c0\ub294 512&#215;512\uc774\uace0, img1.jpg\ub294 1024&#215;1024\ub85c.. img2\ub294 2048&#215;2048\ub85c.. img3\ub294 4096&#215;4096\uc758 \ud06c\uae30\ub85c \ud655\ub300\ub418\uc5b4 \uc800\uc7a5\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc9c0\uae08\uae4c\uc9c0\uc758 \uc774\ubbf8\uc9c0 \ud53c\ub77c\ubbf8\ub4dc\ub294 Gaussian Pyramid \ub77c\uace0 \ud558\ub294\ub370, Laplacian Pyramids \ub77c\ub294 \uc885\ub958\uc758 \ud53c\ub77c\ubbf8\ub4dc\uac00 \uc788\uc2b5\ub2c8\ub2e4. Laplacian Pyramids\ub294 Gaussian Pyramid\ub85c\ubd80\ud130 \uc0dd\uc131\ub418\uba70 OpenCV\uc5d0\uc11c \uc774\ub97c \uc704\ud574 \ubcc4\ub3c4\ub85c \uc81c\uacf5\ud558\ub294 \ud568\uc218\ub294 \uc5c6\uc2b5\ub2c8\ub2e4. Gaussian Pyramid\ub294 Gaussian Pyramid\ub85c\ubd80\ud130 \uc0dd\uc131\ub41c \uc774\ubbf8\uc9c0\ub4e4\uc5d0 \ub300\ud55c \uc678\uacfd\uc120 \ucd94\ucd9c \uc774\ubbf8\uc9c0\ub4e4\uc758 \uc9d1\ud569\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774\ubbf8\uc9c0 \ud53c\ub77c\ubbf8\ub4dc\uc5d0 \ub300\ud55c \uc751\uc6a9 \uc911 \ud558\ub098\ub85c Image Blending\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ud558\ub098\uc758 \uc608\uc81c \ucf54\ub4dc\ub97c \uc5b8\uae09\ud560\ud150\ub370, \uadf8 \uc608\uc81c \ucf54\ub4dc\uc758 \uacb0\uacfc\ub97c \uba3c\uc800 \ubcf4\uba74..<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/opencv_image_blending_piramid.png\" alt=\"\" width=\"1156\" height=\"1199\" class=\"aligncenter size-full wp-image-6561\" \/><\/p>\n<p>A \uc601\uc0c1\uacfc B \uc601\uc0c1\uc758 \ubc18\uc529 \ud63c\ud569\ud558\uc5ec ls_\uacfc real\uc774\ub77c\ub294 \uc0c8\ub85c\uc6b4 \uc601\uc0c1\uc744 \ub9cc\ub4dc\ub294 \uac83\uc778\ub370 real\uc740 \ub2e8\uc21c\ud788 A\uc640 B \uac01\uac01 \uc88c\uc6b0\uc5d0 \ub300\ud55c \uc774\ubbf8\uc9c0\ub97c \ubd99\uc778 \uc774\ubbf8\uc9c0\uc774\uc9c0\ub9cc ls_\ub294 A\uc640 B\ub97c \ubd99\uc778 \uacbd\uacc4\uac00 \ub0a0\uce74\ub86d\uc9c0 \uc54a\uace0 \uc790\uc5f0\uc2a4\ub7fd\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 ls_\ub97c \uc0dd\uc131\ud558\ub294 \uc808\ucc28\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<ol>\n<li>A\uc640 B \uc774\ubbf8\uc9c0\ub97c \ub85c\ub529\ud55c\ub2e4.<\/li>\n<li>A\uc640 B\uc5d0 \ub300\ud55c Gaussian Pyramid\ub97c \uc0dd\uc131\ud55c\ub2e4. (6\uac1c \uc815\ub3c4)<\/li>\n<li>Gaussian Pyramid\ub85c \uc0dd\uc131\ub41c \uacb0\uacfc\ub85c\ubd80\ud130 Laplacian Pyramids\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/li>\n<li>Laplacian Pyramids\uc758 \uac01 \ub808\ubca8\uc5d0 \ub300\ud55c A\uc640 B \uc601\uc0c1\uc758 \ubc18\uc808\uc529 \uc870\ud569\ud55c\ub2e4.<\/li>\n<li>\uc55e\uc11c \uc870\ud569\ud55c \uc774\ubbf8\uc9c0 \ud53c\ub77c\ubbf8\ub4dc\ub85c\ubd80\ud130 \uc6d0\ubcf8 \uc774\ubbf8\uc9c0\ub97c \ub2e4\uc2dc \uc0dd\uc131\ud55c\ub2e4.<\/li>\n<\/ol>\n<p>\uc704\uc758 \uc808\ucc28\uc5d0 \ub300\ud55c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport cv2\r\nimport numpy as np\r\nfrom matplotlib import pyplot as plt\r\n\r\nA = cv2.imread('.\/data\/apple.jpg')\r\nB = cv2.imread('.\/data\/orange.jpg')\r\n \r\n# generate Gaussian pyramid for A\r\nG = A.copy()\r\ngpA = [G]\r\nfor i in range(6):\r\n    G = cv2.pyrDown(G)\r\n    gpA.append(G)\r\n\r\n# generate Gaussian pyramid for B\r\nG = B.copy()\r\ngpB = [G]\r\nfor i in range(6):\r\n    G = cv2.pyrDown(G)\r\n    gpB.append(G)\r\n\r\n# generate Laplacian Pyramid for A\r\nlpA = [gpA[5]]\r\nfor i in range(5,0,-1):\r\n    GE = cv2.pyrUp(gpA[i])\r\n    L = cv2.subtract(gpA[i-1],GE)\r\n    lpA.append(L)\r\n\r\n# generate Laplacian Pyramid for B\r\nlpB = [gpB[5]]\r\nfor i in range(5,0,-1):\r\n    GE = cv2.pyrUp(gpB[i])\r\n    L = cv2.subtract(gpB[i-1],GE)\r\n    lpB.append(L)\r\n\r\n# Now add left and right halves of images in each level\r\nLS = []\r\nxxx = 0\r\nfor la,lb in zip(lpA,lpB):\r\n    rows,cols,dpt = la.shape\r\n    ls = np.hstack((la[:,0:int(cols\/2)], lb[:,int(cols\/2):]))\r\n    LS.append(ls)\r\n\r\n# now reconstruct\r\nls_ = LS[0]\r\nfor i in range(1,6):\r\n    ls_ = cv2.pyrUp(ls_)\r\n    ls_ = cv2.add(ls_, LS[i])\r\n\r\n# image with direct connecting each half\r\nreal = np.hstack((A[:,:int(cols\/2)],B[:,int(cols\/2):]))\r\n\r\nb, g, r = cv2.split(A)\r\nA = cv2.merge([r,g,b])\r\nplt.subplot(2,2,1), plt.imshow(A), plt.title('A'), plt.xticks([]), plt.yticks([])\r\n\r\nb, g, r = cv2.split(B)\r\nB = cv2.merge([r,g,b])\r\nplt.subplot(2,2,2), plt.imshow(B), plt.title('B'), plt.xticks([]), plt.yticks([])\r\n\r\nb, g, r = cv2.split(ls_)\r\nls_ = cv2.merge([r,g,b])\r\nplt.subplot(2,2,3), plt.imshow(ls_), plt.title('ls_'), plt.xticks([]), plt.yticks([])\r\n\r\nb, g, r = cv2.split(real)\r\nreal = cv2.merge([r,g,b])\r\nplt.subplot(2,2,4), plt.imshow(real), plt.title('real'), plt.xticks([]), plt.yticks([])\r\n\r\nplt.show()\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_imgproc\/py_pyramids\/py_pyramids.html#pyramids \uc785\ub2c8\ub2e4. \ub3d9\uc77c\ud55c \uc601\uc0c1\uc5d0 \ub300\ud574\uc11c \uc774\ubbf8\uc9c0\uc758 \ud06c\uae30\ub97c 50% \ud06c\uae30\ub9cc\ud07c \uc5f0\uc18d\uc801\uc73c\ub85c \uc904\uc774\uac70\ub098 \ub298\ub824 \uc0dd\uc131\ub41c \uc774\ubbf8\uc9c0 \uc9d1\ud569\uc744 \uc774\ubbf8\uc9c0 \ud53c\ub77c\ubbf8\ub4dc\ub77c\uace0 \ud569\ub2c8\ub2e4. OpenCV\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc774\ubbf8\uc9c0 \ud53c\ub77c\ubbf8\ub4dc \uad00\ub828 \ud568\uc218\ub294 cv2.pyrDown\uacfc cv2.pryUp \uc778\ub370, cv2.pyrDown \ud568\uc218\ub294 \uc785\ub825 \uc774\ubbf8\uc9c0\ub97c 50% \ud06c\uae30\ub85c \uc904\uc778 \uc774\ubbf8\uc9c0\ub97c \uc0dd\uc131\ud574 \ubc18\ud658\ud558\uace0 cv2.pryUp\uc740 \uc785\ub825 \uc774\ubbf8\uc9c0\ub97c 200% \ud06c\uae30\ub85c \ud655\ub300\ud55c \uc774\ubbf8\uc9c0\ub97c \uc0dd\uc131\ud574 \ubc18\ud658\ud569\ub2c8\ub2e4. \uba3c\uc800 cv2.pryDown \ud568\uc218\uc758 \uc608\ub97c \uc0b4\ud3b4\ubcf4\uba74.. import &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=6560\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Python\uacfc OpenCV \u2013 14 : \uc774\ubbf8\uc9c0 \ud53c\ub77c\ubbf8\ub4dc(Image Piramid)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[130,131],"tags":[],"class_list":["post-6560","post","type-post","status-publish","format-standard","hentry","category-opencv","category-python"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6560"}],"version-history":[{"count":6,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6560\/revisions"}],"predecessor-version":[{"id":9471,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6560\/revisions\/9471"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6560"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}