{"id":6679,"date":"2019-04-15T09:53:12","date_gmt":"2019-04-15T00:53:12","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=6679"},"modified":"2020-05-28T12:24:55","modified_gmt":"2020-05-28T03:24:55","slug":"python%ea%b3%bc-opencv-23-template-matching","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=6679","title":{"rendered":"Python\uacfc OpenCV \u2013 24 : Template Matching"},"content":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_imgproc\/py_template_matching\/py_template_matching.html#template-matching \uc785\ub2c8\ub2e4.<\/p>\n<p>\ud15c\ud50c\ub9bf \ub9e4\uce6d\uc774\ub780 \uc5b4\ub5a4 \ud070 \uc774\ubbf8\uc9c0\uc5d0 \uc874\uc7ac\ud558\ub294 \ub2e4\ub978 \uc791\uc740 \uc870\uac01 \uc774\ubbf8\uc9c0(\ud15c\ud50c\ub9bf \uc774\ubbf8\uc9c0)\uac00 \uc5b4\ub514\uc5d0 \uc874\uc7ac\ud558\ub294\uc9c0\ub97c \ucc3e\uc544 \ub0b4\ub294 \uac83\uc785\ub2c8\ub2e4. \uc608\ub97c\ub4e4\uc5b4 \uc544\ub798\uc758 \uc774\ubbf8\uc9c0 \uc911 \uc67c\ucabd \uc774\ubbf8\uc9c0\uc5d0\uc11c \uc624\ub978\ucabd\uc758 \uc870\uac01 \uc774\ubbf8\uc9c0\ub97c \ucc3e\uc544\ub0b4\ub294 \uac83\uc744 \ub9d0\ud569\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/template_matching.png\" alt=\"\" width=\"797\" height=\"354\" class=\"aligncenter size-full wp-image-6680\" \/><\/p>\n<p>\uc704\uc758 \uc785\ub825 \uc774\ubbf8\uc9c0\ub97c \ud65c\uc6a9\ud558\uc5ec \ud15c\ud50c\ub9bf \ub9e4\uce6d\uc5d0 \ub300\ud55c OpenCV \uc608\uc81c\ub97c \uc0b4\ud3b4\ubcf4\uba74..<\/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\/messi5.jpg',0)\r\nimg2 = img.copy()\r\ntemplate = cv2.imread('.\/data\/messi_face.jpg',0)\r\nw, h = template.shape[::-1]\r\n\r\n# All the 6 methods for comparison in a list\r\nmethods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR',\r\n            'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']\r\n\r\nfor meth in methods:\r\n    img = img2.copy()\r\n    method = eval(meth)\r\n\r\n    # Apply template Matching\r\n    res = cv2.matchTemplate(img,template,method)\r\n    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)\r\n\r\n    # If the method is TM_SQDIFF or TM_SQDIFF_NORMED, take minimum\r\n    if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:\r\n        top_left = min_loc\r\n    else:\r\n        top_left = max_loc\r\n    bottom_right = (top_left[0] + w, top_left[1] + h)\r\n\r\n    cv2.rectangle(img,top_left, bottom_right, 255, 2)\r\n\r\n    plt.subplot(121),plt.imshow(res,cmap = 'gray')\r\n    plt.title('Matching Result'), plt.xticks([]), plt.yticks([])\r\n    plt.subplot(122),plt.imshow(img,cmap = 'gray')\r\n    plt.title('Detected Point'), plt.xticks([]), plt.yticks([])\r\n    plt.suptitle(meth)\r\n\r\n    plt.show()\r\n<\/pre>\n<p>OpenCV\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ud15c\ud50c\ub9bf \ub9e4\uce6d\uc5d0 \ub300\ud55c \ud568\uc218\ub294 cv2.matchTemplate\uc785\ub2c8\ub2e4. \ucd1d 6\uac00\uc9c0 \uc885\ub958\uc758 \ud0ec\ud50c\ub9bf \ub9e4\uce6d \uc54c\uace0\ub9ac\uc998\uc744 \uc81c\uacf5\ud558\ub294\ub370 11\ubc88 \ucf54\ub4dc\uc758 \ubc30\uc5f4\uc5d0 \uc5b8\uae09\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ucd1d 6\uac1c\uc758 \uacb0\uacfc\uac00 \ud45c\uc2dc\ub418\ub294\ub370 \uc774\ud574\ub97c \ub3d5\uae30 \uc704\ud574 \ud558\ub098\ub9cc \uc5b8\uae09\ud558\uba74 \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\/template_matching2.png\" alt=\"\" width=\"642\" height=\"546\" class=\"aligncenter size-full wp-image-6683\" \/><\/p>\n<p>\uc704\uc758 \uc608\uc81c\ub294 \ub2e8 \ud558\ub098\uc758 \ub9e4\uce6d \uacb0\uacfc\ub9cc\uc744 \ubc18\ud658\ud558\ub294\ub370, \ub9cc\uc57d \uc774\ubbf8\uc9c0\uc5d0 \ub3d9\uc77c\ud55c \ud15c\ud50c\ub9bf \uc774\ubbf8\uc9c0\uac00 \uc5ec\ub7ec\uac1c \uc874\uc7ac\ud560 \uacbd\uc6b0\uc5d0 \ub300\ud55c \uc608\uc81c\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uba3c\uc800 \uc785\ub825 \uc774\ubbf8\uc9c0\uc778\ub370\uc694. \uc544\ub798\uc758 \uc67c\ucabd \uc774\ubbf8\uc9c0\uc5d0\uc11c \uc624\ub978\ucabd\uc758 \uc870\uac01 \uc774\ubbf8\uc9c0\ub97c \ucc3e\uc544\ub0b4\uace0\uc790 \ud569\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/template_matching3.png\" alt=\"\" width=\"403\" height=\"241\" class=\"aligncenter size-full wp-image-6685\" \/><\/p>\n<p>\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\nimg_rgb = cv2.imread('.\/data\/mario.png')\r\nimg_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)\r\ntemplate = cv2.imread('.\/data\/coin.png',0)\r\nw, h = template.shape[::-1]\r\n\r\nres = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)\r\nthreshold = 0.8\r\nloc = np.where(res >= threshold)\r\nfor pt in zip(*loc[::-1]):\r\n    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)\r\n\r\ncv2.imshow('result', img_rgb)\r\ncv2.waitKey()\r\ncv2.destroyAllWindows()\r\n<\/pre>\n<p>\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\/template_matching4.png\" alt=\"\" width=\"259\" height=\"273\" class=\"aligncenter size-full wp-image-6687\" \/><\/p>\n<p>\uc77c\uce58\ud558\ub294 \uac83\uc744 1\uac1c\ub9cc \ucc3e\uc744\ub54c\ub294 \ucd5c\ub300, \ucd5c\uc18c\uac12\uc5d0 \uae30\ubc18\ud558\uc9c0\ub9cc \uc5ec\ub7ec\uac1c\ub97c \ucc3e\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc784\uacc4\uce58 \uc870\uac74(\uc704\uc758 \uc608\uc81c\uc758 \uacbd\uc6b0 0.8)\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc784\uacc4\uce58 \uac12\ubcf4\ub2e4 \ud070 \ubaa8\ub4e0 \ub9e4\uce6d \uc601\uc5ed\uc744 \ud45c\uc2dc\ud558\uace0 \uc788\uc2b5\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_template_matching\/py_template_matching.html#template-matching \uc785\ub2c8\ub2e4. \ud15c\ud50c\ub9bf \ub9e4\uce6d\uc774\ub780 \uc5b4\ub5a4 \ud070 \uc774\ubbf8\uc9c0\uc5d0 \uc874\uc7ac\ud558\ub294 \ub2e4\ub978 \uc791\uc740 \uc870\uac01 \uc774\ubbf8\uc9c0(\ud15c\ud50c\ub9bf \uc774\ubbf8\uc9c0)\uac00 \uc5b4\ub514\uc5d0 \uc874\uc7ac\ud558\ub294\uc9c0\ub97c \ucc3e\uc544 \ub0b4\ub294 \uac83\uc785\ub2c8\ub2e4. \uc608\ub97c\ub4e4\uc5b4 \uc544\ub798\uc758 \uc774\ubbf8\uc9c0 \uc911 \uc67c\ucabd \uc774\ubbf8\uc9c0\uc5d0\uc11c \uc624\ub978\ucabd\uc758 \uc870\uac01 \uc774\ubbf8\uc9c0\ub97c \ucc3e\uc544\ub0b4\ub294 \uac83\uc744 \ub9d0\ud569\ub2c8\ub2e4. \uc704\uc758 \uc785\ub825 \uc774\ubbf8\uc9c0\ub97c \ud65c\uc6a9\ud558\uc5ec \ud15c\ud50c\ub9bf \ub9e4\uce6d\uc5d0 \ub300\ud55c OpenCV \uc608\uc81c\ub97c \uc0b4\ud3b4\ubcf4\uba74.. import cv2 import numpy as np from matplotlib import pyplot as plt &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=6679\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Python\uacfc OpenCV \u2013 24 : Template Matching&#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-6679","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\/6679","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=6679"}],"version-history":[{"count":9,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6679\/revisions"}],"predecessor-version":[{"id":9454,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6679\/revisions\/9454"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6679"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}