{"id":1452,"date":"2016-11-11T16:20:42","date_gmt":"2016-11-11T07:20:42","guid":{"rendered":"http:\/\/www.digifie.jp\/blog\/?p=1452"},"modified":"2016-11-11T16:39:24","modified_gmt":"2016-11-11T07:39:24","slug":"python-opencv3-1-%e3%81%a7%e7%89%b9%e5%be%b4%e9%87%8f%e3%83%9e%e3%83%83%e3%83%81%e3%83%b3%e3%82%b0","status":"publish","type":"post","link":"https:\/\/www.digifie.jp\/blog\/archives\/1452","title":{"rendered":"Python OpenCV3.1 \u3067\u7279\u5fb4\u91cf\u30de\u30c3\u30c1\u30f3\u30b0"},"content":{"rendered":"<div class='wp_social_bookmarking_light'>        <div class=\"wsbl_facebook\"><a href='http:\/\/www.facebook.com\/share.php?u=https%3A%2F%2Fwww.digifie.jp%2Fblog%2Farchives%2F1452&t=Python%20OpenCV3.1%20%E3%81%A7%E7%89%B9%E5%BE%B4%E9%87%8F%E3%83%9E%E3%83%83%E3%83%81%E3%83%B3%E3%82%B0' title='Facebook \u306b\u30b7\u30a7\u30a2' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='https:\/\/www.digifie.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/facebook.png' alt='Facebook \u306b\u30b7\u30a7\u30a2' title='Facebook \u306b\u30b7\u30a7\u30a2' width='16' height='16' class='wp_social_bookmarking_light_img' \/><\/a><\/div>        <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"https:\/\/www.digifie.jp\/blog\/archives\/1452\" data-text=\"Python OpenCV3.1 \u3067\u7279\u5fb4\u91cf\u30de\u30c3\u30c1\u30f3\u30b0\" data-via=\"LLC DigiFie\" data-lang=\"ja\">Tweet<\/a><\/div><\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n<p>Python + OpenCV3.1 \u3067 \u7279\u5fb4\u91cf\u3092\u691c\u51fa\u3057\u3066\u306e\u753b\u50cf\u30de\u30c3\u30c1\u30f3\u30b0\u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u3002<br \/>\n\u4f7f\u7528\u3057\u305f\u691c\u51fa\u65b9\u6cd5\u306f A-KAZE\u3001KNN \u3067\u3059\u3002<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/ScVnoCywF9Q\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p><a href=\"http:\/\/www.robesafe.com\/personal\/pablo.alcantarilla\/kaze.html\" target=\"_blank\">A-KAZE\uff08ACCELERATED-KAZE\uff09<\/a>\u306f\u3001\u6709\u540d\u306a SURF \u3084 SHIFT \u3068\u540c\u69d8\u306e\u691c\u51fa\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3059\u3002<br \/>\nSURF \u3084 SHIFT \u306f\u8457\u4f5c\u6a29\u306e\u95a2\u4fc2\u3067 OpenCV \u3067\u306f contrib \u30e9\u30a4\u30d6\u30e9\u30ea\u884c\u304d\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u3066\u3044\u307e\u3059\u304c\u3001A-KAZE \u306f core \u30e9\u30a4\u30d6\u30e9\u30ea\u304b\u3089\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>KNN\uff08K-Nearest Neighbor algorithm\uff09\u306f\u3001\u53c2\u8003\u306b\u3057\u305f\u8a18\u4e8b\u306b\u3088\u308b\u3068\u63a2\u7d22\u7a7a\u9593\u304b\u3089\u6700\u8fd1\u508d\u306e\u30e9\u30d9\u30eb\u3092K\u500b\u9078\u629e\u3057\u3001\u591a\u6570\u6c7a\u3067\u30af\u30e9\u30b9\u30e9\u30d9\u30eb\u3092\u5272\u308a\u5f53\u3066\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3060\u305d\u3046\u3067\u3059\u3002<br \/>\n\u4e8c\u901a\u308a\u306e\u63a2\u7d22\u65b9\u6cd5\u3001\u7dcf\u5f53\u305f\u308a\u6cd5\uff08Brute-Force\uff09\u3068\u9ad8\u901f\u8fd1\u4f3c\u8fd1\u508d\u63a2\u7d22\u6cd5\uff08FLANN: Fast Library for Approximate Nearest Neighbors\uff09\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u4eca\u56de\u306f BFM \u3067\u63a2\u7d22\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>FLANN \u3082\u8a66\u3057\u3066\u307f\u305f\u306e\u3067\u3059\u304c\u3001\u50d5\u306e\u74b0\u5883\u3067\u306f cv2.error: \/tmp\/opencv3-20160705-3167-qqbjck\/opencv-3.1.0\/modules\/python\/src2\/cv2.cpp:163: error: (-215) The data should normally be NULL! in function allocate \u3068\u3067\u3066\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\uff08\u53c2\u8003\u306b\u3057\u305f\u8a18\u4e8b\u3067\u3082\u5b9f\u884c\u3067\u304d\u306a\u304b\u3063\u305f\u3088\u3046\u3067\u3059\u2026\uff09<\/p>\n<p>\u4e0b\u8a18\u304c\u4eca\u56de\u8a66\u3057\u305f\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u3067\u3059\u3002<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n# coding: utf-8 \r\nimport cv2\r\nimport numpy as np\r\n\r\n# \u6bd4\u8f03\u5143\u306e\u753b\u50cf\r\nimg1 = cv2.imread(&quot;test.jpg&quot;)\r\n\r\n# A-KAZE\u691c\u51fa\u5668\u306e\u751f\u6210\r\nakaze = cv2.AKAZE_create()\r\n\r\n# \u30ab\u30e1\u30e9\r\ncap = cv2.VideoCapture(0)\r\ncap.set(3, 640)\r\ncap.set(4,480)\r\ncap.set(5, 15)\r\n\r\n# detect\r\ndef detect():\r\n\twhile(cap.isOpened()):\r\n\t\tret, frame = cap.read()\r\n\r\n\t\t# \u7279\u5fb4\u91cf\u306e\u691c\u51fa\u3068\u7279\u5fb4\u91cf\u30d9\u30af\u30c8\u30eb\u306e\u8a08\u7b97\r\n\t\tkp1, des1 = akaze.detectAndCompute(img1, None)\r\n\t\tkp2, des2 = akaze.detectAndCompute(frame, None)\r\n\r\n\t\t# BFM \u751f\u6210\r\n\t\tbf = cv2.BFMatcher()\r\n\r\n\t\t# \u7279\u5fb4\u91cf\u30d9\u30af\u30c8\u30eb\u540c\u58eb\u3092 BFM\uff06KNN \u3067\u30de\u30c3\u30c1\u30f3\u30b0\r\n\t\tmatches = bf.knnMatch(des1, des2, k=2)\r\n\r\n\t\t# \u5168\u90e8\u3060\u3068\u6fc0\u91cd\u306b\u306a\u308b\u306e\u3067\u30c7\u30fc\u30bf\u3092\u9593\u5f15\u304d\u3059\u308b\r\n\t\tratio = 0.6\r\n\t\tgood = []\r\n\t\tfor m, n in matches:\r\n\t\t\tif m.distance &lt; ratio * n.distance:\r\n\t\t\t\tgood.append([m])\r\n\r\n\t\t# \u7279\u5fb4\u70b9\u540c\u58eb\u3092\u63cf\u753b\u3057\u3066\u3064\u306a\u3050\r\n\t\timg3 = cv2.drawMatchesKnn(img1, kp1, frame, kp2, good, None, flags=2)\r\n\r\n\t\t# \u753b\u50cf\u8868\u793a\r\n\t\tcv2.imshow('frame', img3)\r\n\r\n\t\tif cv2.waitKey(1) &amp; 0xFF == ord('q'):\r\n\t\t\tbreak\r\n\r\n\tcap.release()\r\n\tcv2.destroyAllWindows()\r\n\r\n\r\nif __name__ == '__main__':\r\n\tdetect()\r\n<\/pre>\n<p>\u30ab\u30e1\u30e9\u306e\u30ad\u30e3\u30ea\u30d6\u30ec\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u59ff\u52e2\u63a8\u5b9a\u3092\u884c\u3063\u3066\u3001\u3053\u308c\u3092\u691c\u51fa\u306b\u5229\u7528\u3059\u308b\u3068\u30de\u30fc\u30ab\u30fc\u30ec\u30b9 AR \u306e\u3088\u3046\u306a\u3053\u3068\u3082\u3067\u304d\u305d\u3046\u3067\u3059\u306d\u3002\uff08\u9069\u5f53\uff57\uff09<\/p>\n<p>\u4eca\u56de\u53c2\u8003\u306b\u3057\u305f\u8a18\u4e8b\uff1a<a href=\"http:\/\/qiita.com\/olympic2020\/items\/caac014b7ab246faf6b1\" target=\"_blank\">http:\/\/qiita.com\/olympic2020\/items\/caac014b7ab246faf6b1<\/a><br \/>\n\u8a18\u4e8b\u3068\u306f\u3042\u307e\u308a\u95a2\u4fc2\u306a\u3044\u3051\u3069\u59ff\u52e2\u63a8\u5b9a\u306b\u3064\u3044\u3066\u306e\u81ea\u5206\u7528\u30e1\u30e2\uff1a<a href=\"http:\/\/labs.eecs.tottori-u.ac.jp\/sd\/Member\/oyamada\/OpenCV\/html\/py_tutorials\/py_calib3d\/py_pose\/py_pose.html\" target=\"_blank\">http:\/\/labs.eecs.tottori-u.ac.jp\/sd\/Member\/oyamada\/OpenCV\/html\/py_tutorials\/py_calib3d\/py_pose\/py_pose.html<\/a><\/p>\n<div class='wp_social_bookmarking_light'>        <div class=\"wsbl_facebook\"><a href='http:\/\/www.facebook.com\/share.php?u=https%3A%2F%2Fwww.digifie.jp%2Fblog%2Farchives%2F1452&t=Python%20OpenCV3.1%20%E3%81%A7%E7%89%B9%E5%BE%B4%E9%87%8F%E3%83%9E%E3%83%83%E3%83%81%E3%83%B3%E3%82%B0' title='Facebook \u306b\u30b7\u30a7\u30a2' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='https:\/\/www.digifie.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/facebook.png' alt='Facebook \u306b\u30b7\u30a7\u30a2' title='Facebook \u306b\u30b7\u30a7\u30a2' width='16' height='16' class='wp_social_bookmarking_light_img' \/><\/a><\/div>        <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"https:\/\/www.digifie.jp\/blog\/archives\/1452\" data-text=\"Python OpenCV3.1 \u3067\u7279\u5fb4\u91cf\u30de\u30c3\u30c1\u30f3\u30b0\" data-via=\"LLC DigiFie\" data-lang=\"ja\">Tweet<\/a><\/div><\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n","protected":false},"excerpt":{"rendered":"<p>Python + OpenCV3.1 \u3067 \u7279\u5fb4\u91cf\u3092\u691c\u51fa\u3057\u3066\u306e\u753b\u50cf\u30de\u30c3\u30c1\u30f3\u30b0\u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u3002 \u4f7f\u7528\u3057\u305f\u691c\u51fa\u65b9\u6cd5\u306f A-KAZE\u3001KNN \u3067\u3059\u3002 A-KAZE\uff08ACCELERATED-KAZE\uff09\u306f\u3001\u6709\u540d\u306a SURF \u3084 S [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[50,49,38],"tags":[],"_links":{"self":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts\/1452"}],"collection":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/comments?post=1452"}],"version-history":[{"count":6,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts\/1452\/revisions"}],"predecessor-version":[{"id":1458,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts\/1452\/revisions\/1458"}],"wp:attachment":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/media?parent=1452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/categories?post=1452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/tags?post=1452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}