{"id":6824,"date":"2019-05-09T11:13:39","date_gmt":"2019-05-09T02:13:39","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=6824"},"modified":"2020-05-28T10:35:37","modified_gmt":"2020-05-28T01:35:37","slug":"python%ea%b3%bc-opencv-34-%ec%9d%b4%eb%af%b8%ec%a7%80%ec%9d%98-%ed%8a%b9%ec%a7%95%ec%a0%90-%eb%a7%a4%ec%b9%adfeature-matching","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=6824","title":{"rendered":"Python\uacfc OpenCV \u2013 38 : \uc774\ubbf8\uc9c0\uc758 \ud2b9\uc9d5\uc810 \ub9e4\uce6d(Feature Matching)"},"content":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_feature2d\/py_matcher\/py_matcher.html \uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \ub450 \uac1c\uc758 \uc774\ubbf8\uc9c0\uc5d0\uc11c \ub3d9\uc77c\ud55c \ud2b9\uc9d5\uc810\uc744 \ucc3e\uc544 \ub9e4\uce6d\ud574 \uc8fc\ub294 \ub0b4\uc6a9\uc744 \uc0b4\ud3b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. OpenCV\uc5d0\uc11c\ub294 \uc774\ub7f0 \ud2b9\uc9d5\uc810 \ub9e4\uce6d\uc744 Brute-Force \ub9e4\uce6d\uc774\ub77c\uace0 \ud558\ub294\ub370.. \uc774\ub294 \ud558\ub098\uc758 \uc774\ubbf8\uc9c0\uc5d0\uc11c \ubc1c\uacac\ud55c \ud2b9\uc9d5\uc810\uc744 \ub2e4\ub978 \ub610 \ud558\ub098\uc758 \uc774\ubbf8\uc9c0\uc758 \ubaa8\ub4e0 \ud2b9\uc9d5\uc810\uacfc \ube44\uad50\ud574 \uac00\uc7a5 \uc720\uc0ac\ud55c \uac83\uc774 \ub3d9\uc77c\ud55c \ud2b9\uc9d5\uc810\uc774\ub77c\uace0 \ud310\ubcc4\ud558\ub294.. \ub2e8\uc21c\ud558\uc9c0\ub9cc \ub2e4\uc18c \ud6a8\uc728\uc801\uc774\uc9c0 \ubabb\ud55c \ubc29\uc2dd\uc774\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<p>Brute-Force \ub9e4\uce6d\uc744 \uc704\ud55c, \uc989 BF Matcher\ub294 cv2.BFMatcher \ud568\uc218\ub97c \ud1b5\ud574 \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc774 \ud568\uc218\ub294 2\uac1c\uc758 \uc120\ud0dd\uc801 \uc778\uc790\ub97c \ubc1b\ub294\ub370, \uccab\ubc88\uc9f8\ub294 normType\uc774\uba70 \uac70\ub9ac \uce21\uc815 \ubc29\uc2dd\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c\ub294 cv2.NORM_L2\uc774\uba70 cv2.NORM_L1\uacfc \ud568\uaed8 \ud0a4\ud3ec\uc778\ud2b8\uc640 \ud2b9\uc9d5\uc810 \uae30\uc220\uc790\ub97c \uc5f0\uc0b0 \ubc29\uc2dd\uc778 SIFT, SURF\uc5d0 \uc88b\uc2b5\ub2c8\ub2e4. ORB\uc640 BRIEF, BRISK\uc640 \uac19\uc740 2\uc9c4 \ubb38\uc790\uc5f4 \uae30\ubc18\uc758 \ubc29\uc2dd\uc5d0\uc11c\ub294 cv2.NORM_HAMMING\uac00 \uc0ac\uc6a9\ub418\uc5b4\uc838\uc57c \ud569\ub2c8\ub2e4. \ub9cc\uc57d ORB\uac00 VTA_K == 3 \ub610\ub294 4\uc77c \ub54c, cv2.NORMHAMMING2\uac00 \uc0ac\uc6a9\ub418\uc5b4\uc838\uc57c \ud569\ub2c8\ub2e4. \ub450\ubc88\uc7ac \uc778\uc790\ub294 crossCheck\ub77c\ub294 Boolean \ud0c0\uc785\uc758 \uc778\uc790\uc785\ub2c8\ub2e4. \uae30\ubcf8\uac12\uc740 false\uc774\uba70 \ub9cc\uc57d True\ub85c \uc9c0\uc815\ud558\uba74 A\ub77c\ub294 \uc774\ubbf8\uc9c0\uc758 \uc5b4\ub5a4 \ud558\ub098\uc758 \ud2b9\uc9d5\uc810\uc744 B\ub77c\ub294 \uc774\ubbf8\uc9c0\uc758 \ubaa8\ub4e0 \ud2b9\uc9d5\uc810\uacfc \ube44\uad50\ud558\ub294 \uac83\uc5d0\uc11c \ub05d\ub098\uc9c0 \uc54a\uace0, \ub2e4\uc2dc B\ub77c\ub294 \uc774\ubbf8\uc9c0\uc5d0\uc11c \ucc3e\uc740 \uac00\uc7a5 \uc720\uc0ac\ud55c \ud2b9\uc9d5\uc810\uc744 A\ub77c\ub294 \ubaa8\ub4e0 \ud2b9\uc9d5\uc810\uacfc \ube44\uad50\ud558\uc5ec \uadf8 \uacb0\uacfc\uac00 \uac19\uc740\uc9c0\ub97c \uac80\uc0ac\ud558\ub77c\ub294 \uc635\uc158\uc785\ub2c8\ub2e4. \ubcf4\ub2e4 \uc815\ud655\ud55c \ub3d9\uc77c \ud2b9\uc9d5\uc810\uc744 \ucd94\ucd9c\ud558\uace0\uc790 \ud55c\ub2e4\uba74 True\ub97c \uc9c0\uc815\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<p>\uc77c\ubc18 BF Matcher \uac1d\uccb4\uac00 \uc0dd\uc131\ub418\uba74 match()\uc640 knnMatch()\ub77c\ub294 \ud568\uc218\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uccab\ubc88\uc9f8\ub294 \uac00\uc7a5 \uc88b\uc740 \ub9e4\uce6d \uacb0\uacfc\ub97c \ubc18\ud658\ud558\uace0, \ub450\ubc88\uc9f8 \ud568\uc218\ub294 \uc0ac\uc6a9\uc790\uac00 \uc9c0\uc815\ud55c k\uac1c\uc758 \uac00\uc7a5 \uc88b\uc740 \ub9e4\uce6d \uacb0\uacfc\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. \ud2b9\uc9d5\uc810\uc744 \ud45c\uc2dc\ud558\ub294 cv2.drawKeypoints()\uc640 \uac19\uc774, 2\uac1c\uc758 \uc774\ubbf8\uc9c0 \uac04\uc758 \ub3d9\uc77c \ud2b9\uc9d5\uc810\uc744 \uc120\uc73c\ub85c \uc5f0\uacb0\uc5d0 \ud45c\uc2dc\ud574 \uc8fc\ub294 cv2.drawMatches() \ud568\uc218\uc640 cv2.drawMatchesKnn() \ud568\uc218\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \uc2e4\uc81c \uc608\uc81c \ucf54\ub4dc\ub97c \uc0b4\ud3b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uccab\ubc88\uc9f8\ub294 ORB \uae30\uc220\uc790\ub97c \uc0ac\uc6a9\ud55c \ud2b9\uc9d5\uc810 \ube44\uad50, \ub450\ubc88\uc9f8\ub294 SIFT \uae30\uc220\uc790\ub97c \uc0ac\uc6a9\ud55c \ud2b9\uc9d5\uc810 \ube44\uad50, \ub05d\uc73c\ub85c \uc138\ubc88\uc9f8\ub294 FLANN \ubc29\uc2dd\uc758 \ud2b9\uc9d5\uc810 \ube44\uad50\uc785\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800 \uccab\ubc88\uc9f8\ub85c ORB \uae30\uc220\uc790\ub97c \uc0ac\uc6a9\ud55c \ud2b9\uc9d5\uc810 \ube44\uad50\uc5d0 \ub300\ud55c \uc608\uc81c\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport numpy as np\r\nimport cv2\r\nfrom matplotlib import pyplot as plt\r\n\r\nimg1 = cv2.imread('.\/data\/harleyQuinnA.jpg',0)\r\nimg2 = cv2.imread('.\/data\/harleyQuinnB.jpg',0)\r\n\r\norb = cv2.ORB_create()\r\n\r\nkp1, des1 = orb.detectAndCompute(img1,None)\r\nkp2, des2 = orb.detectAndCompute(img2,None)\r\n\r\nbf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)\r\n\r\nmatches = bf.match(des1,des2)\r\n\r\nmatches = sorted(matches, key = lambda x:x.distance)\r\n\r\nimg3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10],None,flags=2)\r\n\r\nplt.imshow(img3),plt.show()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc558\uc2b5\ub2c8\ub2e4. (\uc544\ub798 \uacb0\uacfc\ub294 \uc0c1\ub2f9\uc774 \ubd80\uc815\ud655\ud55c\ub370, \ub2e4\ub978 \uc0ac\uc774\ud2b8\uc758 \uc2e4\ud589\uc744 \ubcf4\uba74 \uc774\uc640 \uc0c1\ubc18\ub41c \uacb0\uacfc\ub97c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc124\uce58\ub41c OpenCV\uc758 \ubc84\uc804\uc5d0 \ub530\ub978 \uc601\ud5a5\uc774 \uc544\ub2cc\uac00 \uc0dd\uac01\ub429\ub2c8\ub2e4)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/05\/BF_Matcher1.png\" alt=\"\" width=\"1577\" height=\"1182\" class=\"aligncenter size-full wp-image-6825\" \/><\/p>\n<p>13\ubc88 \ucf54\ub4dc\uc5d0\uc11c BF Matcher \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uace0 \uc788\ub294\ub370, ORB\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c cv2.NORM_HAMMING\ub97c \uc9c0\uc815\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. 17\ubc88\uc5d0\uc11c\ub294 \ub9e4\uce6d \uacb0\uacfc\uc5d0\uc11c \uac70\ub9ac\uc5d0 \ub530\ub85c \uc624\ub984\ucc28\uc21c\uc73c\ub85c \uc815\ub82c\ud558\uc600\uc2b5\ub2c8\ub2e4. \uac70\ub9ac\uac12\uc774 \uc791\uc744\uc218\ub85d \ub354 \uc88b\uc740 \uacb0\uacfc\uc785\ub2c8\ub2e4. 19\ubc88 \ucf54\ub4dc\uc5d0\uc11c\ub294 \uc774\ub807\uac8c \uc815\ub82c\ub41c \uac83 \uc911 10\uac1c\ub9cc\uc744 \ud654\uba74\uc5d0 \ud45c\uc2dc\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>BF Matcher\uc758 match() \ud568\uc218\uc758 \uacb0\uacfc\ub294 DMatch \uac1d\uccb4\uc758 \ub9ac\uc2a4\ud2b8\uc785\ub2c8\ub2e4. \uc774 \uac1d\uccb4\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc18d\uc131\uc744 \uac16\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>DMatch.distance : \uae30\uc220\uc790(Descriptor) \uac04\uc758 \uac70\ub9ac\ub85c\uc368, \uc791\uc744\uc218\ub85d \ub354 \uc88b\uc740 \uacb0\uacfc\uc784<\/li>\n<li>DMatch.trainIdx : \uc5f0\uc2b5 \uae30\uc220\uc790 \ub9ac\uc2a4\ud2b8\uc5d0 \uc800\uc7a5\ub41c \uc778\ub371\uc2a4(\uc704 \uc608\uc81c\uc5d0\uc11c img1\uc5d0\uc11c \ucd94\ucd9c\ud55c \uae30\uc220\uc790\uac00 \uc5f0\uc2b5 \uae30\uc220\uc790\uc784)<\/li>\n<li>DMatch.queryIdx : \uc870\ud68c \uae30\uc220\uc790 \ub9ac\uc2a4\ud2b8\uc5d0 \uc800\uc7a5\ub41c \uc778\ub371\uc2a4(\uc704 \uc608\uc81c\uc5d0\uc11c img2\uc5d0\uc11c \ucd94\ucd9c\ud55c \uae30\uc220\uc790\uac00 \uc870\ud68c \uae30\uc220\uc790\uc784)<\/li>\n<li>DMatch.imgIdx : \uc5f0\uc2b5 \uc774\ubbf8\uc9c0\uc758 \uc778\ub371\uc2a4<\/li>\n<\/ul>\n<p>\ub450\ubc88\uc9f8 \uc608\uc81c\ub294 SIFT \uae30\uc220\uc790\ub97c \uc774\uc6a9\ud55c \ud2b9\uc9d5\uc810 \ube44\uad50\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport numpy as np\r\nimport cv2\r\nfrom matplotlib import pyplot as plt\r\n\r\nimg1 = cv2.imread('.\/data\/harleyQuinnA.jpg',0)\r\nimg2 = cv2.imread('.\/data\/harleyQuinnB.jpg',0)\r\n\r\nsift = cv2.xfeatures2d.SIFT_create()\r\n\r\nkp1, des1 = sift.detectAndCompute(img1,None)\r\nkp2, des2 = sift.detectAndCompute(img2,None)\r\n\r\nbf = cv2.BFMatcher()\r\nmatches = bf.knnMatch(des1,des2, k=2)\r\n\r\ngood = []\r\nfor m,n in matches:\r\n    if m.distance < 0.3*n.distance:\r\n        good.append([m])\r\n\r\nimg3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)\r\n\r\nplt.imshow(img3),plt.show()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/05\/BF_Matcher2.png\" alt=\"\" width=\"1572\" height=\"1177\" class=\"aligncenter size-full wp-image-6827\" \/><\/p>\n<p>\ub9c8\uc9c0\ub9c9 \uc608\uc81c\ub294 FLANN \uc785\ub2c8\ub2e4. FLANN\uc740 Fast Library for Approximate Nearest Neighbors\uc758 \uc57d\uc790\uc785\ub2c8\ub2e4. \ub300\uc6a9\ub7c9\uc758 \ub370\uc774\ud130\uc14b\uacfc \uace0\ucc28\uc6d0 \ud2b9\uc9d5\uc810\uc5d0 \uc788\uc5b4\uc11c \uc18d\ub3c4\uba74\uc5d0 \ucd5c\uc801\ud654 \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \uc55e\uc11c \uc0b4\ud3b4\ubcf8 BF Matcher \ubc29\uc2dd\ubcf4\ub2e4 \uc880\ub354 \ube60\ub985\ub2c8\ub2e4.<\/p>\n<p>FLANN \uae30\ubc18 Matcher\ub97c \uc704\ud574, \uc54c\uace0\ub9ac\uc998 \uc218\ud589\uc744 \uc704\ud55c 2\uac1c\uc758 dictionary\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uccab\ubc88\uc9f8\ub294 IndexParams \uc778\ub370, SIFT\ub098 SURF \ub4f1\uc758 \uacbd\uc6b0 \uc544\ub798\ucc98\ub7fc \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nindex_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)\r\n<\/pre>\n<p>ORB\uc758 \uacbd\uc6b0\uc5d0\ub294 \ub2e4\uc74c\ucc98\ub7fc \uc0dd\uc131\ub429\ub2c8\ub2e4. <\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nindex_params= dict(algorithm = FLANN_INDEX_LSH,\r\n                   table_number = 6, # 12\r\n                   key_size = 12,     # 20\r\n                   multi_probe_level = 1) #2\r\n<\/pre>\n<p>\ub450\ubc88\uc9f8 dictionary\ub294 SearchParams\uc774\uba70 \ub2e4\uc74c\ucc98\ub7fc \uc0dd\uc131\ub429\ub2c8\ub2e4. \uc815\ubc00\ub3c4\ub97c \ub192\uc774\uae30 \uc704\ud574 \ub354 \ub192\uc740 checks \uac11\uc744 \uc9c0\uc815\ud560 \uc218 \uc788\uc9c0\ub9cc \uc2dc\uac04\uc774 \ub354 \uc18c\uc694 \ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nsearch_params = dict(checks=100)\r\n<\/pre>\n<p>\uc804\uccb4 \uc608\uc81c \ucf54\ub4dc\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport numpy as np\r\nimport cv2\r\nfrom matplotlib import pyplot as plt\r\n\r\nimg1 = cv2.imread('.\/data\/harleyQuinnA.jpg',0)\r\nimg2 = cv2.imread('.\/data\/harleyQuinnB.jpg',0)\r\n\r\n# Initiate SIFT detector\r\nsift = cv2.xfeatures2d.SIFT_create()\r\n\r\n# find the keypoints and descriptors with SIFT\r\nkp1, des1 = sift.detectAndCompute(img1,None)\r\nkp2, des2 = sift.detectAndCompute(img2,None)\r\n\r\n# FLANN parameters\r\nFLANN_INDEX_KDTREE = 0\r\nindex_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)\r\nsearch_params = dict(checks=50)   # or pass empty dictionary\r\n\r\nflann = cv2.FlannBasedMatcher(index_params,search_params)\r\n\r\nmatches = flann.knnMatch(des1,des2,k=2)\r\n\r\n# Need to draw only good matches, so create a mask\r\nmatchesMask = [[0,0] for i in range(len(matches))]\r\n\r\n# ratio test as per Lowe's paper\r\nfor i,(m,n) in enumerate(matches):\r\n    if m.distance < 0.3*n.distance:\r\n        matchesMask[i]=[1,0]\r\n\r\ndraw_params = dict(matchColor = (0,255,0),\r\n                   singlePointColor = (255,0,0),\r\n                   matchesMask = matchesMask,\r\n                   flags = 0)\r\n\r\nimg3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_params)\r\n\r\nplt.imshow(img3,),plt.show()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/05\/BF_Matcher3.png\" alt=\"\" width=\"1571\" height=\"1175\" class=\"aligncenter size-full wp-image-6828\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_feature2d\/py_matcher\/py_matcher.html \uc785\ub2c8\ub2e4. \uc774\uc81c \ub450 \uac1c\uc758 \uc774\ubbf8\uc9c0\uc5d0\uc11c \ub3d9\uc77c\ud55c \ud2b9\uc9d5\uc810\uc744 \ucc3e\uc544 \ub9e4\uce6d\ud574 \uc8fc\ub294 \ub0b4\uc6a9\uc744 \uc0b4\ud3b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. OpenCV\uc5d0\uc11c\ub294 \uc774\ub7f0 \ud2b9\uc9d5\uc810 \ub9e4\uce6d\uc744 Brute-Force \ub9e4\uce6d\uc774\ub77c\uace0 \ud558\ub294\ub370.. \uc774\ub294 \ud558\ub098\uc758 \uc774\ubbf8\uc9c0\uc5d0\uc11c \ubc1c\uacac\ud55c \ud2b9\uc9d5\uc810\uc744 \ub2e4\ub978 \ub610 \ud558\ub098\uc758 \uc774\ubbf8\uc9c0\uc758 \ubaa8\ub4e0 \ud2b9\uc9d5\uc810\uacfc \ube44\uad50\ud574 \uac00\uc7a5 \uc720\uc0ac\ud55c \uac83\uc774 \ub3d9\uc77c\ud55c \ud2b9\uc9d5\uc810\uc774\ub77c\uace0 \ud310\ubcc4\ud558\ub294.. \ub2e8\uc21c\ud558\uc9c0\ub9cc \ub2e4\uc18c \ud6a8\uc728\uc801\uc774\uc9c0 \ubabb\ud55c \ubc29\uc2dd\uc774\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. Brute-Force \ub9e4\uce6d\uc744 \uc704\ud55c, \uc989 BF Matcher\ub294 cv2.BFMatcher &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=6824\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Python\uacfc OpenCV \u2013 38 : \uc774\ubbf8\uc9c0\uc758 \ud2b9\uc9d5\uc810 \ub9e4\uce6d(Feature 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-6824","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\/6824","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=6824"}],"version-history":[{"count":5,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6824\/revisions"}],"predecessor-version":[{"id":9431,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6824\/revisions\/9431"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6824"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6824"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6824"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}