{"id":45795,"date":"2021-12-07T09:38:01","date_gmt":"2021-12-07T00:38:01","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=45795"},"modified":"2021-12-07T09:38:03","modified_gmt":"2021-12-07T00:38:03","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-%ec%9c%a4%ea%b3%bd%ec%84%a0-%ea%b8%b8%ec%9d%b4-%ea%b5%ac%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=45795","title":{"rendered":"[\uc548\ub4dc\ub85c\uc774\ub4dc\ub85c \ubc30\uc6b0\ub294 OpenCV] \uc724\uacfd\uc120 \uae38\uc774 \uad6c\ud558\uae30"},"content":{"rendered":"\n<p>\uc9c0\ub09c \ud3ec\uc2a4\ud305\uc5d0\uc11c \uc724\uacfd\uc120 \uac80\ucd9c \ud568\uc218 findContours() \ub97c \ud1b5\ud574 \uc724\uacfd\uc120\uc744 \uac80\ucd9c\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uc558\ub2e4.<\/p>\n\n\n\n<p>\uc774 \ud3ec\uc2a4\ud305\uc5d0\uc11c\ub294 \uac80\ucd9c\ud55c \uc724\uacfd\uc120 \uc815\ubcf4\ub97c \uac00\uc9c0\uace0 \uc724\uacfd\uc120\uc758 \uae38\uc774\ub97c \uad6c\ud558\ub294 \ud568\uc218\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\uc724\uacfd\uc120 \uae38\uc774 \uad6c\ud558\uae30<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Imgproc.arcLength(contour, closed)<\/code><\/pre>\n\n\n\n<p>contour: \uc724\uacfd\uc120 \uc815\ubcf4(\uc88c\ud45c)<br>closed: true\uba74 \ud3d0\uace1\uc120<br>\ubc18\ud658\uac12: \uc724\uacfd\uc120\uc758 \uae38\uc774<\/p>\n\n\n\n<p>arcLength \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\ub294 <strong>\uac00\uc7a5 \uae34 \uc678\uacfd\uc120<\/strong>\ub9cc \uac80\ucd9c\ud558\ub294 \uc608\uc81c\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uc790.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"400\" height=\"400\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-contours.bmp\" alt=\"\" class=\"wp-image-45803\"\/><figcaption>\uc6d0\ubcf8<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-screenshot-1638836837820-820x1024.png\" alt=\"\" class=\"wp-image-45804\" width=\"410\" height=\"512\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-screenshot-1638836837820-820x1024.png 820w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-screenshot-1638836837820-240x300.png 240w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-screenshot-1638836837820-768x959.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-screenshot-1638836837820-1230x1536.png 1230w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-screenshot-1638836837820-1640x2048.png 1640w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2021\/12\/www.charlezz.com-screenshot-1638836837820.png 1768w\" sizes=\"(max-width: 410px) 100vw, 410px\" \/><figcaption>\uac00\uc7a5 \uae34 \uc724\uacfd\uc120\uc744 \uac80\ucd9c (\ub458\ub808 896px)<\/figcaption><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>val contours:ArrayList&lt;MatOfPoint> = ... \/\/ findContours\ub85c \uac80\ucd9c\ud55c \uc724\uacfd\uc120 \uc815\ubcf4\nvar longest = 0.0 \/\/ \uac00\uc7a5 \uae34 \uc724\uacfd\uc120 \uae38\uc774\ub97c \uc800\uc7a5\nvar longestContourIdx = -1; \/\/ contours\uc5d0\uc11c \uac00\uc7a5 \uae34 \uc724\uacfd\uc120\uc758 index\ub97c \uc800\uc7a5\n\nfor (i in 0 until contours.size) {\n    \/\/ \uc724\uacfd\uc120 \uae38\uc774 \uad6c\ud558\uae30\n    val perimeter = Imgproc.arcLength(MatOfPoint2f(*contours&#91;i].toArray()), true)\n    \/\/ \uac00\uc7a5 \uae34 \uc724\uacfd\uc120\uc778\uc9c0 \uac80\uc0ac\n    if (perimeter > longest) {\n        longest = perimeter\n        longestContourIdx = i\n    }\n}\nif (longestContourIdx != -1) {\n    \/\/ \uc6d0\ubcf8\uc704\uc5d0 \ube68\uac04 \uc724\uacfd\uc120 \uadf8\ub9ac\uae30\n    Imgproc.drawContours(\n        src,\n        contours,\n        longestContourIdx,\n        RED,\n        5,\n        Imgproc.LINE_8,\n        hierarchy,\n        0\n    )\n    \/\/ \uc724\uacfd\uc120 \uae38\uc774 \ud14d\uc2a4\ud2b8\ubdf0\uc5d0 \ucd9c\ub825\n    result = String.format(\"perimeter = %.2f\", longest)\n}<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote\"><p>Tip : findContours \ud568\uc218\ub85c \ucc3e\uc740 \uc724\uacfd\uc120\ub4e4\uc758 \uc815\ubcf4\ub294 MatOfPoint \ud0c0\uc785\uc774\ub2e4. arcLength\uc758 \uacbd\uc6b0 \ub9e4\uac1c\ubcc0\uc218\ub85c MatOfPoint2f \ud0c0\uc785\uc744 \uc694\uad6c\ud55c\ub2e4. \uc774 \uacbd\uc6b0, MatOfPoint\ub97c MatOfPoint2f\ub85c \ub2e4\uc74c\uacfc \uac19\uc774 \ubcc0\uacbd\ud560 \uc218 \uc788\ub2e4.<\/p><p>val contour: MatOfPoint = &#8230;<br>val contour2f: MatOfPoint2F = <em>MatOfPoint2f(*contour.toArray()<\/em>)<br><\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\uc9c0\ub09c \ud3ec\uc2a4\ud305\uc5d0\uc11c \uc724\uacfd\uc120 \uac80\ucd9c \ud568\uc218 findContours() \ub97c \ud1b5\ud574 \uc724\uacfd\uc120\uc744 \uac80\ucd9c\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uc558\ub2e4. \uc774 \ud3ec\uc2a4\ud305\uc5d0\uc11c\ub294 \uac80\ucd9c\ud55c \uc724\uacfd\uc120 \uc815\ubcf4\ub97c \uac00\uc9c0\uace0 \uc724\uacfd\uc120\uc758 \uae38\uc774\ub97c \uad6c\ud558\ub294 \ud568\uc218\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf8\ub2e4. \uc724\uacfd\uc120 \uae38\uc774 \uad6c\ud558\uae30 contour: \uc724\uacfd\uc120 \uc815\ubcf4(\uc88c\ud45c)closed: true\uba74 \ud3d0\uace1\uc120\ubc18\ud658\uac12: \uc724\uacfd\uc120\uc758 \uae38\uc774 arcLength \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\ub294 \uac00\uc7a5 \uae34 \uc678\uacfd\uc120\ub9cc \uac80\ucd9c\ud558\ub294 \uc608\uc81c\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uc790. Tip : findContours \ud568\uc218\ub85c \ucc3e\uc740 \uc724\uacfd\uc120\ub4e4\uc758 [&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\/45795"}],"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=45795"}],"version-history":[{"count":1,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45795\/revisions"}],"predecessor-version":[{"id":45805,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/45795\/revisions\/45805"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=45795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=45795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=45795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}