###前提・実現したいこと
opencvを使ってSIFTによる特徴検出を行なっている。
二枚の画像の中に含まれる類似する特徴点のマッチングを行い、二つの画像を合成することが目標である。
###発生している問題・エラーメッセージ
現在、特徴点のマッチングまでを行う事ができているが、二つの画像を重ね合わせる事が出来ていない。マッチングされた特徴点のペアの相対関係を示すベクトルの取得方法が分からないので行き詰まっている。
あと、二枚の画像の合成方法も簡単な方法があれば教えて頂きたい。現在は、空のnumpy 行列を作成して、アフィン変換をした二枚の画像を代入するということを行なっているが、コードが乱雑になっている。
###該当のソースコード
Python3.5
1""" 2SIFTを用いて特徴点を抽出する 3detector: 特徴抽出を行うメソッドのオブジェクト 4detector.detectAndCompute: 描画のためのキーポイントと 5 各キーポイントでの特徴ベクトルを出力する関数 6""" 7def sift(img,): 8 detector = cv2.xfeatures2d.SIFT_create() 9 keypoints = detector.detect(img) 10 keypoints, des = detector.detectAndCompute(img, None) 11 return keypoints, des 12 13""" 14二つの画像で特徴点のマッチングを行い、 15画像を合成する。 16マッチングのためのオブジェクトによって行う 17""" 18def matching(img1, key1, img2, key2): 19 bf = cv2.BFMatcher(normType=cv2.NORM_L2, crossCheck=False) 20 matches = bf.match(des1, des2) 21 matches = sorted(matches, key = lambda x:x.distance) 22 img3 = cv2.drawMatches(img1, key1, img2, key2, matches[:100], None, flags=2) 23 return img3 24 25 26img_name1 = "fig-1.jpg" 27img_name2 = "fig-2.jpg" 28img1= read_image(img_name1) 29img2 = read_image(img_name2) 30key1, des1= sift(img1) 31key2, des2 = sift(img2) 32 33# matching 34_ = matching(img1, key1, img2, key2)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。