回答編集履歴

1

コメントに対する追記

2019/04/27 02:10

投稿

sin_250
sin_250

スコア112

test CHANGED
@@ -13,3 +13,33 @@
13
13
 
14
14
 
15
15
  `good.append([m])`ではなく、`good.append(m)`だということです。
16
+
17
+
18
+
19
+ [追記]
20
+
21
+ まず、queryIdxのエラーが出る原因を理解されていますでしょうか?
22
+
23
+ `src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)`における`m`はリスト型になっています。
24
+
25
+ 29行目でgoodに要素を追加した時の`m`と記号が同じなのでわかりづらいので、記号を以下のように変えると
26
+
27
+ `src_pts = np.float32([kp1[M.queryIdx].pt for M in good]).reshape(-1, 1, 2)`
28
+
29
+ `M`は`m`ではなく`[m]`なのです。ゆえに、`queryIdx`は存在しないと言われています。
30
+
31
+
32
+
33
+ 一方で、`cv2.drawMatchesKnn`関数の引数ではコメント頂いているようにリストで渡す必要があります。
34
+
35
+ 安直に対応するなら、上のコードの`m.queryIdx`を`m[0].queryIdx`にしてしまえば動きます。
36
+
37
+ あるいは、5のリンクの2番めの解答(AliErenさんの解答)のようにしても良いと思います。
38
+
39
+
40
+
41
+ あと、`height, width = img2.shape`は`height, width, channel = img2.shape`にしないとエラーが出ました。
42
+
43
+
44
+
45
+ こちらの環境では(意図したものかはわかりませんが)、画像が表示されるところまでは動きました。 以上