我必须使用python和openCV将两个或多个图像拼接在一起。 我发现这个代码用于查找关键点和匹配,但我不知道如何继续。 请帮帮我!
import numpy as np
import cv2
MIN_MATCH_COUNT = 10
img1 = cv2.imread('a.jpg',0) # queryImage
img2 = cv2.imread('b.jpg',0) # trainImage
# Initiate SIFT detector
sift = cv2.SIFT()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks = 50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1,des2,k=2)
# store all the good matches as per Lowe's ratio test.
good = []
for m,n in matches:
if m.distance < 0.7*n.distance:
good.append(m)
答案 0 :(得分:0)
你的问题不是很清楚,但我认为你的意思是你有一堆图像,你想让opencv找到相应的地标,然后扭曲/缩放每张图片,这样它们就可以形成一个大图像。
中记录了一种不使用拼接器类的方法,基本上循环遍历图片并确定每次迭代的最佳拟合。答案 1 :(得分:0)
图像拼接的一种方法包括以下步骤。
首先,正如您已经想到的那样,您需要一个特征点检测器和一些方法来查找两个图像上的特征点之间的对应关系。消除大量的对应关系通常是一个好主意,因为它们可能包含很多噪音。消除大量噪音的一种非常简单的方法是在匹配中寻找对称性。
这大致是您的代码到目前为止所做的。
接下来,要将图像拼接在一起,您需要扭曲其中一个图像以匹配另一个图像的透视。这是通过使用对应关系估计单应性来完成的。由于您的通信仍可能包含大量噪音,我们通常会使用RANSAC来有力地估计单应性。
快速谷歌搜索提供了许多实施的例子。