一.效果演示:

二.使用说明:
1.实测项目在低像素下(1080p)下,拼接效果优良————可以通过修改照片像素实现更好的拼接效果

2.下载压缩包解压后,把文件拖入pycharm下即可

3.解压后,修改文件下文件名即可替换成自己需要的图片


4.每段代码都有注释

三.代码模块&流程演示

四.部分代码
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
import time
# 特征点提取函数
def extract_features(img1, img2):
sift = cv.xfeatures2d.SIFT_create(nOctaveLayers=4)
key1, describe1 = sift.detectAndCompute(img1, None)
key2, describe2 = sift.detectAndCompute(img2, None)
print(f"模板特征点数目:{len(key1)}")
print(f"待匹配图片特征点数:{len(key2)}")
img3 = img1.copy() # 复制img1并命名为img3,在img3上绘制关键点
img4 = img2.copy() # 同上 img3 = cv.drawKeypoints(img3, key1, img3, ) # 绘制关键点
img4 = cv.drawKeypoints(img4, key2, img4, )
fig, axes = plt.subplots(1, 2) # 创建一个1x2的子图布局,将两个图像放在不同的子图中
axes[0].imshow(img3), axes[0].axis('off') # 在第一个子图中显示img1
axes[1].imshow(img4), axes[1].axis('off'), plt.show() # 在第二个子图中显示img2
return key1, describe1, key2, describe2,img3,img4
# 特征点匹配函数
def match_features(describe1, describe2, MIN=10):
FLANN_INDEX_KDTREE = 0
indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
searchParams = dict(checks=50)
flann = cv.FlannBasedMatcher(indexParams, searchParams)
match = flann.knnMatch(describe1, describe2, k=2)
print(f"总匹配对数:{len(match)}")
good_matches = []
for i, (m, n) in enumerate(match):
if m.distance < 0.55 * n.distance:
good_matches.append(m)
print(f"正确匹配对数:{len(good_matches)}")
return good_matches