python opencv で2枚の画像(比較される画像、パターン画像)を比較して、
特徴量マッチングをおこない、一致した場所を四角形でくくりたいと考えています。
いろいろ検索してインターネット上から、上記内容ができそうな
参考プログラムを見つけたため、試してみました。
作ったコード
python
1import numpy as np 2import cv2 3import sys 4 5img1 = cv2.imread("src/star.png",0) 6img2 = cv2.imread("src/starPtn.png",0) 7 8akaze = cv2.AKAZE_create() 9 10kp1, des1 = akaze.detectAndCompute(img1,None) 11kp2, des2 = akaze.detectAndCompute(img2,None) 12 13bf = cv2.BFMatcher() 14matches = bf.knnMatch(des1,des2,k = 2) 15 16good = [] 17for m,n in matches: 18 if m.distance < 0.7*n.distance: 19 good.append(m) 20 21if len(good)>MIN_MATCH_COUNT: 22 src_pts = np.float32([ kp1[m.queryIdx].pt for m in good ]).reshape(-1,1,2) 23 dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good ]).reshape(-1,1,2) 24 25 M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0) 26 matchesMask = mask.ravel().tolist() 27 28 h,w = img1.shape 29 pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2) 30 dst = cv2.perspectiveTransform(pts,M) 31 32 print('true') 33 print(np.int32(dst)[0][0][0],np.int32(dst)[0][0][1]) 34 print(np.int32(dst)[1][0][0],np.int32(dst)[1][0][1]) 35 print(np.int32(dst)[2][0][0],np.int32(dst)[2][0][1]) 36 print(np.int32(dst)[3][0][0],np.int32(dst)[3][0][1]) 37 38else: 39 print('false') 40
print 出力結果:
true
-204 -82
-204 297
488 296
488 -81
となります。
得られた結果は、なにを表しているのでしょうか?
(座標を表しているとは思いますが、マイナス[-]がでるのは?)
以上、宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。