{"id":6740,"date":"2019-04-20T13:48:03","date_gmt":"2019-04-20T04:48:03","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=6740"},"modified":"2020-05-28T12:21:16","modified_gmt":"2020-05-28T03:21:16","slug":"python%ea%b3%bc-opencv-27-watershed-%ec%95%8c%ea%b3%a0%eb%a6%ac%ec%a6%98%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ec%9d%b4%eb%af%b8%ec%a7%80-%eb%b6%84%ed%95%a0","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=6740","title":{"rendered":"Python\uacfc OpenCV \u2013 28 : Watershed \uc54c\uace0\ub9ac\uc998\uc744 \uc774\uc6a9\ud55c \uc774\ubbf8\uc9c0 \ubd84\ud560"},"content":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_imgproc\/py_watershed\/py_watershed.html \uc785\ub2c8\ub2e4.<\/p>\n<p>\ud68c\uc0c9\uc870 \uc774\ubbf8\uc9c0\ub294 \uc9c0\ud615\ucc98\ub7fc \ud574\uc11d\ud560 \uc218 \uc788\ub294\ub370, \uac12\uc774 \ub192\uc740 \ud53d\uc140 \uc704\uce58\ub294 \uc0b0\uaf2d\ub300\uae30\uc774\uace0 \uac12\uc774 \ub0ae\uc740 \ud53d\uc140 \uc704\uce58\ub294 \uacc4\uace1\uc774\ub77c\uace0 \ud574\uc11d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc9c0\ud615\uc774\ubbc0\ub85c \uace0\ub9bd\ub418\uc5b4 \ubd84\ub9ac\ub41c \uacc4\uace1\uc774 \uc788\uc744 \uac83\uc774\uace0 \uc774 \uacc4\uace1\ub4e4\uc744 \uc11c\ub85c \ub2e4\ub978 \uc0c9\uc758 \ubb3c\ub85c \ucc44\uc6b0\uae30 \uc2dc\uc791\ud558\uba74 \ubb3c\uc774 \uc810\uc810 \ucc28\uc624\ub974\ub2e4\uac00 \uc774\uc6c3\ud55c \uacc4\uace1\uc758 \uc5b8\uc800\ub9ac\uc5d0\uc11c \ubb3c\uc774 \ud569\uccd0\uc9c0\uac8c \ub429\ub2c8\ub2e4. \ubb3c\uc774 \ud569\uccd0\uc9c0\ub294 \uac83\uc744 \ud53c\ud558\uae30 \uc704\ud574\uc11c \ud569\uccd0\uc9c0\ub294 \uc21c\uac04\uc5d0\uc11c\uc758 \uc704\uce58\uc5d0 \uacbd\uacc4\ub97c \uc0dd\uc131\ud558\ub294\uac70\uc8e0. \uadf8\ub7fc \uc774 \uacbd\uacc4\uc120\uc774 \uc774\ubbf8\uc9c0 \ubd84\ud560\uc758 \uacb0\uacfc\uac00 \ub429\ub2c8\ub2e4. \uc774\uac83\uc774 \ubc14\ub85c Watershed \uc54c\uace0\ub9ac\uc998\uc758 \uae30\ubcf8\ucca0\ud559\uc785\ub2c8\ub2e4. \uc544\ub798\uc758 \ub3d9\uc601\uc0c1 \uc774\ubbf8\uc9c0\ub97c \ubcf4\uba74 \uc880\ub354 \uc9c1\uad00\uc801\uc73c\ub85c \uc774\ud574\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/lpe1.gif\" alt=\"\" width=\"256\" height=\"256\" class=\"aligncenter size-full wp-image-6741\" \/><\/p>\n<p>\uc774 \ubc29\uc2dd\uc744 \ud1b5\ud574 \uc774\ubbf8\uc9c0\ub97c \ubd84\ud560\ud558\uac8c \ub418\uba74 \ubd84\ud560\uc5d0 \uc624\ub958\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294\ub370, \uc774\ub294 \uc774\ubbf8\uc9c0\uc758 \uc7a1\uc74c\uc774\ub098 \uc5b4\ub5a4 \ubd88\uaddc\uce59\ud55c \uac83\ub4e4\ub85c \uc778\ud55c \uc694\uc18c \ub4f1\uc774 \uc774\uc720\uc785\ub2c8\ub2e4. \uadf8\ub798\uc11c OpenCV\ub294 \ub9c8\ucee4 \uae30\ubc18\uc758 Watershed \uc54c\uace0\ub9ac\uc998\uc744 \uad6c\ud604\ud574 \uc81c\uacf5\ud558\ub294\ub370.. \uac01 \uacc4\uace1\uc744 \uad6c\uc131\ud558\ub294 \ud654\uc18c\ub4e4\uc744 \ubcd1\ud569\uc2dc\ucf1c \ubc88\ud638\ub97c \ub9e4\uae30\uace0, \ubcd1\ud569 \uc218 \uc5c6\ub294 \uc560\ub9e4\ud55c \ud654\uc18c\ub294 0\uac12\uc744 \ub9e4\uae41\ub2c8\ub2e4. \uc774\ub97c \uc778\ud130\ub809\ud2f0\ube0c\ud55c \uc774\ubbf8\uc9c0 \ubd84\ud560 \uae30\ubc95\uc774\ub77c\uace0 \ud569\ub2c8\ub2e4. \uc6b0\ub9ac\uac00 \uc54c\uace0 \uc788\ub294 \uac1d\uccb4\uc5d0 \uac01\uac01\uc5d0 \ub300\ud574 0 \uc774\uc0c1\uc758 \ubc88\ud638\ub97c \ub9e4\uae30\ub294 \uac83\uc778\ub370\uc694. \uc804\uacbd\uc774 \ub418\uac70\ub098 \uac1d\uccb4\uc778 \uac83\uc5d0, \ub610 \ubc30\uacbd\uc5d0\ub3c4 0 \uc774\uc0c1\uc758 \uac12\uc744 \ub9e4\uae41\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uadf8\uc678 \ubd88\uba85\ud655\ud558\ub2e4\ub77c\uace0 \ud310\ub2e8\ub418\ub294 \uac83\uc740 0\uc744 \ub9e4\uae41\ub2c8\ub2e4. \uc774 \ubd88\uba85\ud655\ud55c \uac83\uc774 \uc5b4\ub5a4 \uc694\uc18c, \uc989 \ubc30\uacbd\uc778\uc9c0 \uc804\uacbd\uc778\uc9c0 \ub610\ub294 \uc5b4\ub5a4 \uac1d\uccb4\uc758 \uc18c\uc720\uc778\uc9c0\ub294 Watershed \uc54c\uace0\ub9ac\uc998\uc744 \ud1b5\ud574 \uacb0\uc815\ub429\ub2c8\ub2e4. Watershed \uc54c\uace0\ub9ac\uc998\uc744 \ud1b5\ud574 \ubd84\ud560 \uacbd\uacc4\uc120\uc774 \uc0dd\uae38 \uac83\uc774\uace0 \uc774 \uacbd\uacc4\uc120\uc5d0 \ub300\ud574\uc11c\ub294 -1 \uac12\uc744 \ub9e4\uae41\ub2c8\ub2e4.<\/p>\n<p>\uc790, \uc774\uc81c \uc774\ub860\uc5d0 \ub300\ud55c \uc124\uba85\uc740 \ub05d\ub0ac\uc73c\ubbc0\ub85c \uc608\uc81c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uaca0\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\nimg = cv2.imread('.\/data\/water_coins.jpg')\r\n\r\n# \uc774\uc9c4 \uc774\ubbf8\uc9c0\ub85c \ubcc0\ud658\r\ngray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\r\nret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)\r\n\r\n# \uc7a1\uc74c \uc81c\uac70\r\nkernel = np.ones((3,3), np.uint8)\r\nopening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)\r\n\r\n# \uc774\ubbf8\uc9c0 \ud655\uc7a5\uc744 \ud1b5\ud574 \ud655\uc2e4\ud55c \ubc30\uacbd \uc694\uc18c \ud655\ubcf4\r\nsure_bg = cv2.dilate(opening, kernel, iterations=3)\r\n\r\n# distance transform\uc744 \uc801\uc6a9\ud558\uba74 \uc911\uc2ec\uc73c\ub85c \ubd80\ud130 Skeleton Image\ub97c \uc5bb\uc744 \uc218 \uc788\uc74c.\r\n# \uc774 \uacb0\uacfc\uc5d0 Threshold\ub97c \uc801\uc6a9\ud558\uc5ec \ud655\uc2e4\ud55c \uac1d\uccb4 \ub610\ub294 \uc804\uacbd \uc694\uc18c\ub97c \ud655\ubcf4\r\ndist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)\r\nret, sure_fg = cv2.threshold(dist_transform, 0.5*dist_transform.max(), 255, 0)\r\nsure_fg = np.uint8(sure_fg)\r\n\r\n# \ubc30\uacbd\uacfc \uc804\uacbd\uc744 \uc81c\uc678\ud55c \uc601\uc5ed \uacf3\uc744 \ud655\ubcf4\r\nunknown = cv2.subtract(sure_bg, sure_fg)\r\n\r\n# \ub9c8\ucee4 \uc0dd\uc131 \uc791\uc131\r\nret, markers = cv2.connectedComponents(sure_fg)\r\nmarkers = markers + 1\r\nmarkers[unknown == 255] = 0\r\n\r\n# \uc55e\uc11c \uc0dd\uc131\ud55c \ub9c8\ucee4\ub97c \uc774\uc6a9\ud574 Watershed \uc54c\uace0\ub9ac\uc998\uc744 \uc801\uc6a9\r\nmarkers = cv2.watershed(img, markers)\r\nimg[markers == -1] = [255,0,0]\r\n\r\nimages = [gray,thresh,opening, sure_bg, dist_transform, sure_fg, unknown, markers, img]\r\ntitles = ['Gray', 'Binary', 'Opening', 'Sure BG', 'Distance', 'Sure FG', 'Unknow', 'Markers', 'Result']\r\n\r\nfor i in range(len(images)):\r\n    plt.subplot(3,3,i+1)\r\n    plt.imshow(images[i])\r\n    plt.title(titles[i])\r\n    plt.xticks([])\r\n    plt.yticks([])\r\n\r\nplt.show()\r\n<\/pre>\n<p>\uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/watershed.png\" alt=\"\" width=\"1342\" height=\"1474\" class=\"aligncenter size-full wp-image-6743\" \/><\/p>\n<p>\ucf54\ub4dc\uc640 \uc2e4\ud589 \uacb0\uacfc\ub97c \ube44\uad50\ud574 \uac00\uba70, \uc124\uba85\uc744 \ud574 \ubcf4\uba74.. \uba3c\uc800 5\ubc88 \ucf54\ub4dc\uc5d0\uc11c \uc785\ub825 \uc774\ubbf8\uc9c0\ub97c \ud30c\uc77c\ub85c\ubd80\ud130 \uc77d\uace0 \uc774 \uc774\ubbf8\uc9c0\ub97c 2\uc9c4 \uc774\ubbf8\uc9c0\ub85c \uc0dd\uc131\ud558\ub294 \uac83\uc774 5-9\ubc88 \ucf54\ub4dc\uc774\uace0 \uacb0\uacfc \uc774\ubbf8\uc9c0\uc758 Binary\uc785\ub2c8\ub2e4. \uc7a1\uc74c\uc744 \uc81c\uac70 \ud558\uae30 \uc704\ud574 12-13\ubc88 \ucf54\ub4dc\uac00 \uc2e4\ud589\ub418\uace0 \uacb0\uacfc \uc774\ubbf8\uc9c0\uc758 Opening\uc785\ub2c8\ub2e4. \uc7a1\uc74c\uc744 \uc81c\uac70\ud55c \uc774\ubbf8\uc9c0\uc5d0 dilate \ud568\uc218\ub97c \ud1b5\ud574 \uc774\ubbf8\uc9c0\uc758 \uac1d\uccb4\ub97c \ud655\uc7a5\uc2dc\ud0a8 \uac83\uc774 16\ubc88 \ucf54\ub4dc\uc774\uace0 \uacb0\uacfc \uc774\ubbf8\uc9c0\uc758 Sure_BG\uc785\ub2c8\ub2e4. \uc774\uc81c \ud655\uc2e4\ud55c \uc804\uacbd \ub610\ub294 \uac1d\uccb4\uc5d0 \ub300\ud55c \ud654\uc18c\ub97c \uc5bb\uae30 \uc704\ud574 18-22\ubc88 \ucf54\ub4dc\uac00 \uc2e4\ud589\ub418\uace0 \uadf8 \uacb0\uacfc \uc774\ubbf8\uc9c0\ub294 Sure_FG\uc785\ub2c8\ub2e4. Sure_FG\ub294 \uacb0\uacfc \uc774\ubbf8\uc9c0\uc758 Distance \uc774\ubbf8\uc9c0\ub85c\ubd80\ud130 threshold \ucc98\ub9ac\ub97c \ud1b5\ud574 \uc5bb\uc5b4\uc9c4 \uac83\uc785\ub2c8\ub2e4. \uc774\uc81c \ubc30\uacbd\uc778 Sure_BG\uc5d0\uc11c \uc804\uacbd\uc778 Sure_FG\ub97c \ube7c\uba74 \uc560\ub9e4\ubaa8\ud638\ud55c \uc601\uc5ed\uc744 \uc5bb\uc744 \uc218 \uc788\uac8c \ub418\ub294\ub370, 25\ubc88 \ucf54\ub4dc\uac00 \uc774\uc5d0 \ud574\ub2f9\ub418\uace0 \uadf8 \uacb0\uacfc \uc774\ubbf8\uc9c0\ub294 Unknonw\uc785\ub2c8\ub2e4. \uc989 \uc5b4\ub5a4 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 \ubb38\uc81c\uc758 \ubc94\uc704\ub97c \uc881\ud600 \ub098\uac00\uace0 \uc788\ub2e4\ub294 \uac83\uc744 \uc9c1\uac10\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ub9c8\ucee4 \uc774\ubbf8\uc9c0\ub97c sure_fg\ub97c \uc774\uc6a9\ud574 \uc0dd\uc131\ud558\ub294\ub370 28-30\ubc88 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uba38\ucee4\ub294 0\uac12\ubd80\ud130 \uc9c0\uc815\ub418\ubbc0\ub85c \uacb0\uacfc \ub9c8\ucee4\uc5d0 1\uc529 \uc99d\uac10\uc2dc\ud0a4\uace0, \uc560\ub9e4\ubaa8\ud638\ud55c \ubd80\ubd84\uc5d0 \ub300\ud574\uc11c\ub294 0 \uac12\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4. \uc55e\uc11c \uc774\ub860\uc5d0 \uc5b8\uae09\ud588\ub358 \uac83\ucc98\ub7fc\uc694. \ub9c8\ucee4\uac00 \uc900\ube44\ub418\uc5c8\uc73c\ubbc0\ub85c, \uc774\uc81c Watershed \uc54c\uace0\ub9ac\uc998\uc744 \uc801\uc6a9\ud558\uace0 \ubd84\ud560 \uacbd\uacc4\uc120\uc5d0 \ud574\ub2f9\ub418\ub294 \ud654\uc18c\uc5d0 \uc9c0\uc815\ub41c \uac12\uc778 -1\uc744 \uac00\uc9c0\ub294 \ubd80\ubd84\uc744 [255,0,0] \uc0c9\uc0c1\uc73c\ub85c \uc9c0\uc815\ud558\ub294 \uac83\uc774 33-34\ubc88 \ucf54\ub4dc\uc774\uba70, \ucd5c\uc885 \uacb0\uacfc \uc774\ubbf8\uc9c0\uc778 Result\uc785\ub2c8\ub2e4.<\/p>\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_watershed\/py_watershed.html \uc785\ub2c8\ub2e4. \ud68c\uc0c9\uc870 \uc774\ubbf8\uc9c0\ub294 \uc9c0\ud615\ucc98\ub7fc \ud574\uc11d\ud560 \uc218 \uc788\ub294\ub370, \uac12\uc774 \ub192\uc740 \ud53d\uc140 \uc704\uce58\ub294 \uc0b0\uaf2d\ub300\uae30\uc774\uace0 \uac12\uc774 \ub0ae\uc740 \ud53d\uc140 \uc704\uce58\ub294 \uacc4\uace1\uc774\ub77c\uace0 \ud574\uc11d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc9c0\ud615\uc774\ubbc0\ub85c \uace0\ub9bd\ub418\uc5b4 \ubd84\ub9ac\ub41c \uacc4\uace1\uc774 \uc788\uc744 \uac83\uc774\uace0 \uc774 \uacc4\uace1\ub4e4\uc744 \uc11c\ub85c \ub2e4\ub978 \uc0c9\uc758 \ubb3c\ub85c \ucc44\uc6b0\uae30 \uc2dc\uc791\ud558\uba74 \ubb3c\uc774 \uc810\uc810 \ucc28\uc624\ub974\ub2e4\uac00 \uc774\uc6c3\ud55c \uacc4\uace1\uc758 \uc5b8\uc800\ub9ac\uc5d0\uc11c \ubb3c\uc774 \ud569\uccd0\uc9c0\uac8c \ub429\ub2c8\ub2e4. \ubb3c\uc774 \ud569\uccd0\uc9c0\ub294 \uac83\uc744 \ud53c\ud558\uae30 \uc704\ud574\uc11c \ud569\uccd0\uc9c0\ub294 \uc21c\uac04\uc5d0\uc11c\uc758 \uc704\uce58\uc5d0 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=6740\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Python\uacfc OpenCV \u2013 28 : Watershed \uc54c\uace0\ub9ac\uc998\uc744 \uc774\uc6a9\ud55c \uc774\ubbf8\uc9c0 \ubd84\ud560&#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-6740","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\/6740","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=6740"}],"version-history":[{"count":6,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6740\/revisions"}],"predecessor-version":[{"id":9447,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6740\/revisions\/9447"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6740"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6740"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6740"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}