1
私は検出器を取捨選択使用され、同様にここでは一例に、見つかった画像の周囲にバウンディングボックスを描画するためにオーブ検出器を使用することを望んでいる:SIFT Refrence画像ホモグラフィでオーブ検出器を使用するにはどうすればよいですか?
リンクされた例はFlannBasedMatcherを使用しています。私のコードはBFMatcherを使用します。私は使用されたMatcherに好みがありません。
MIN_MATCH_COUNT = 10
img1 = cv2.imread('box.png',0)
img2 = cv2.imread('box_in_scene.png',0)
orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1,des2)
box_in_scene画像を描くためにホモグラフィを使用するにはどうすればよいですか?
EDIT:私は以下を試しましたが、期待どおりの出力がありませんでした。
src_pts = np.float32([ kp1[m.queryIdx].pt for m in matches[:50] ]).reshape(-1,1,2)
dst_pts = np.float32([ kp2[m.trainIdx].pt for m in matches[:50] ]).reshape(-1,1,2)
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
matchesMask = mask.ravel().tolist()
h,w = img1.shape
pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
dst = cv2.perspectiveTransform(pts,M)
マッチングが良好であれば、点(0,0)の変換;(img1.cols、 0);(0、img1.rows)と(img1.cols、img1.rows)をホモグラフィと線で描画します。 – Micka
@Micka 'matches = sorted(マッチ、キー=ラムダx:x.distance) src_pts = np.float32(マッチ[:50]のmの場合はkp1 [m.queryIdx] .pt))reshape( - (-1,1,2) dst_pts = np.float32(マッチ[:50]のmの場合は[kp2 [m.trainIdx] .pt))reshape(-1,1,2) M、mask = cv2 .findHomography(src_pts、dst_pts、cv2.RANSAC、5.0) matchesMask = mask.ravel()。ToListメソッド() H、W = img1.shape PTS = np.float32([0,0] [0,1]、[w-1、h-1]、[w-1,0]])reshape(-1,1,2) dst = cv2.perspectiveTransform(pts、M) ' 私は試しましたしかし、それは正確に動作していないようです。 – tester
これは私の結果です。 https://i.stack.imgur.com/0IS3w.png 'red'ボックスは' flann'、 'green'ボックスは' match'です。彼らはほとんど同じです。 – Silencer