{"id":45839,"date":"2021-12-09T10:14:07","date_gmt":"2021-12-09T01:14:07","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=45839"},"modified":"2021-12-09T10:14:09","modified_gmt":"2021-12-09T01:14:09","slug":"%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c%eb%a1%9c-%eb%b0%b0%ec%9a%b0%eb%8a%94-opencv-convex-hull-%ea%b5%ac%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=45839","title":{"rendered":"[\uc548\ub4dc\ub85c\uc774\ub4dc\ub85c \ubc30\uc6b0\ub294 OpenCV] Convex hull \uad6c\ud558\uae30"},"content":{"rendered":"\n<p>Prerequisite : <a href=\"https:\/\/www.charlezz.com\/?p=45795\">\uc724\uacfd\uc120 \uae38\uc774 \uad6c\ud558\uae30<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Convex hull <\/h2>\n\n\n\n<p>Convex hull\uc774\ub780 2\ucc28\uc6d0 \ud3c9\uba74\uc0c1\uc5d0 \uc5ec\ub7ec\uac1c\uc758 \uc810\uc774 \uc788\uc744 \ub54c, \uc810\ub4e4 \uc911 \uc77c\ubd80\ub97c \uc774\uc6a9\ud558\uc5ec Convex(\ubcfc\ub85d)\ud55c \ub2e4\uac01\ud615\uc774\uba74\uc11c, \ub2e4\uac01\ud615 \ub0b4\ubd80\uc5d0 \ubaa8\ub4e0 \uc810\uc744 \ud3ec\ud568\uc2dc\ud0a4\ub294 \uac83\uc744 \uc758\ubbf8\ud55c\ub2e4. <\/p>\n\n\n\n<p>\uc544\ub798\uc758 \uc774\ubbf8\uc9c0\ub97c \ucc38\uc870\ud558\uc5ec \uc8fc\uc5b4\uc9c4 \uc815\uc810\uc5d0 \ub300\ud55c Convex hull \uc54c\uace0\ub9ac\uc998\uc758 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uc790.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"493\" height=\"352\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-img1.daumcdn.png\" alt=\"\" class=\"wp-image-45840\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-img1.daumcdn.png 493w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-img1.daumcdn-300x214.png 300w\" sizes=\"(max-width: 493px) 100vw, 493px\" \/><figcaption>\uc6d0\ubcf8<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"493\" height=\"352\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-img1.daumcdn-1.png\" alt=\"\" class=\"wp-image-45841\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-img1.daumcdn-1.png 493w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-img1.daumcdn-1-300x214.png 300w\" sizes=\"(max-width: 493px) 100vw, 493px\" \/><figcaption>Convex hull \uc54c\uace0\ub9ac\uc998\uc744 \ud1b5\ud574 \uc8fc\uc5b4\uc9c4 \uc815\uc810\uc744 \uac10\uc2f8\ub294 \ubcfc\ub85d\ud55c \ub2e4\uac01\ud615<\/figcaption><\/figure><\/div>\n\n\n\n<p>\ud604\uc7ac OpenCV\uc5d0\uc11c\ub294 convex hull\uc744 \uad6c\ud558\uae30 \uc704\ud574 convexHull()\uc774\ub77c\ub294 \ud568\uc218\ub97c \uc81c\uacf5\ud558\uba70, \uc774\ub294 Jack Sklansky\uc774 \uace0\uc548\ud55c \uc54c\uace0\ub9ac\uc998\uc744 \uc0ac\uc6a9\ud558\uace0 O(N logN)\uc758 \uc2dc\uac04\ubcf5\uc7a1\ub3c4\ub97c \uac16\ub294\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Imgproc.convexHull(contour, hull)<\/pre>\n\n\n\n<p>contour: \uc724\uacfd\uc120 \uc88c\ud45c (\uc815\uc810\ub4e4)<br>hull: \uc8fc\uc5b4\uc9c4 \uc815\uc810\ub4e4\uc744 \ubcfc\ub85d\ud558\uac8c \uac10\uc300 \uc218 \uc788\ub294 \uc815\uc810 \ubc30\uc5f4 <\/p>\n\n\n\n<p>convexHull\ud568\uc218\ub97c \uc774\uc6a9\ud558\uc5ec \uc774\ubbf8\uc9c0\ub0b4 \uc724\uacfd\uc120\uc744 \uac10\uc2f8\ub294 \uc608\uc81c\ub97c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012263169-820x1024.png\" alt=\"\" class=\"wp-image-45844\" width=\"615\" height=\"768\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012263169-820x1024.png 820w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012263169-240x300.png 240w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012263169-768x959.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012263169-1230x1536.png 1230w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012263169-1640x2048.png 1640w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012263169.png 1768w\" sizes=\"(max-width: 615px) 100vw, 615px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012253863-820x1024.png\" alt=\"\" class=\"wp-image-45845\" width=\"615\" height=\"768\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012253863-820x1024.png 820w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012253863-240x300.png 240w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012253863-768x959.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012253863-1230x1536.png 1230w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012253863-1640x2048.png 1640w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-opencv-convex-hull-screenshot-1639012253863.png 1768w\" sizes=\"(max-width: 615px) 100vw, 615px\" \/><\/figure><\/div>\n\n\n\n<p>\uc608\uc81c \ucf54\ub4dc:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">val contours = ArrayList&lt;MatOfPoint>()\nval hierarchy = Mat()\n\n\/\/\uc724\uacfd\uc120 \uac80\ucd9c\nImgproc.findContours(\n    binarySrc,\n    contours,\n    hierarchy,\n    Imgproc.<em>RETR_TREE<\/em>,\n    Imgproc.<em>CHAIN_APPROX_SIMPLE\n<\/em>)\nfor (i in 0 <em>until <\/em>contours.size) {\n    val contour = contours[i]\n    val hull = MatOfInt()\n\n    \/\/ \ucee8\ubca1\uc2a4 \ud5d0 \ucc3e\uae30\n    Imgproc.convexHull(contour, hull)\n\n    \/\/ \ucee8\ubca1\uc2a4 \ud5d0 \uc815\uc810\ub9cc \ucd94\ub824\ub0b4\uae30\n    val contourArray: Array&lt;Point> = contour.toArray()\n    val hullPoints: Array&lt;Point?> = <em>arrayOfNulls<\/em>(hull.rows())\n    val hullContourIdxList = hull.toList()\n    for (j in hullContourIdxList.<em>indices<\/em>) {\n        hullPoints[j] = contourArray[hullContourIdxList[j]]\n    }\n    \n    \/\/ \ucc98\uc74c\uc5d0 \uac80\ucd9c\ud55c \uc724\uacfd\uc120 \uc815\ubcf4\ub97c \ud1a0\ub300\ub85c \uadf8\ub9ac\uae30\n    Imgproc.drawContours(src, contours, i, <em>RED<\/em>)\n    \/\/ \ucee8\ubca1\uc2a4 \ud5d0 \uc815\ubcf4\ub97c \ud1a0\ub300\ub85c \uadf8\ub9ac\uae30\n    Imgproc.drawContours(src, <em>listOf<\/em>(MatOfPoint(*hullPoints)),0, <em>GREEN<\/em>)\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Prerequisite : \uc724\uacfd\uc120 \uae38\uc774 \uad6c\ud558\uae30 Convex hull Convex hull\uc774\ub780 2\ucc28\uc6d0 \ud3c9\uba74\uc0c1\uc5d0 \uc5ec\ub7ec\uac1c\uc758 \uc810\uc774 \uc788\uc744 \ub54c, \uc810\ub4e4 \uc911 \uc77c\ubd80\ub97c \uc774\uc6a9\ud558\uc5ec Convex(\ubcfc\ub85d)\ud55c \ub2e4\uac01\ud615\uc774\uba74\uc11c, \ub2e4\uac01\ud615 \ub0b4\ubd80\uc5d0 \ubaa8\ub4e0 \uc810\uc744 \ud3ec\ud568\uc2dc\ud0a4\ub294 \uac83\uc744 \uc758\ubbf8\ud55c\ub2e4. \uc544\ub798\uc758 \uc774\ubbf8\uc9c0\ub97c \ucc38\uc870\ud558\uc5ec \uc8fc\uc5b4\uc9c4 \uc815\uc810\uc5d0 \ub300\ud55c Convex hull \uc54c\uace0\ub9ac\uc998\uc758 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uc790. \ud604\uc7ac OpenCV\uc5d0\uc11c\ub294 convex hull\uc744 \uad6c\ud558\uae30 \uc704\ud574 convexHull()\uc774\ub77c\ub294 \ud568\uc218\ub97c \uc81c\uacf5\ud558\uba70, \uc774\ub294 Jack [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[27],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45839"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=45839"}],"version-history":[{"count":1,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45839\/revisions"}],"predecessor-version":[{"id":45846,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45839\/revisions\/45846"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=45839"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=45839"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=45839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}