图像拼接Python

2024-10-01 00:18:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须使用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)

Tags: theimportasparamscv2jpgimg1good
2条回答

一种图像拼接方法包括以下步骤。

首先,正如您已经知道的,您需要一个特征点检测器和某种方法来找到两幅图像上特征点之间的对应关系。消除大量的通信通常是个好主意,因为它们可能包含大量的噪声。消除大量噪声的一个超级简单的方法是在匹配中寻找对称性。

这大概就是你的代码到目前为止所做的。

接下来,要将图像缝合在一起,需要扭曲其中一个图像以匹配另一个图像的透视图。这是通过使用对应估计单应来实现的。因为你们的对应关系仍然可能包含很多噪声,我们通常使用RANSAC来稳健地估计单应性。

快速的google搜索提供了许多正在实现的例子。

你的问题不是很清楚,但我假设你的意思是你有一堆图片,你想让opencv找到相应的地标,然后扭曲/缩放每一张图片,这样它们就可以形成一个大图像。

不使用缝合器类的方法,基本上是在图片上循环,并在每次迭代中确定最合适的一个,在this github code中有记录

相关问题 更多 >