【计算机视觉】基于SIFT算法的图像拼接小项目(精炼137行代码&模块化&拼接效果优良)

一.效果演示:

在这里插入图片描述

二.使用说明:

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


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YY的秘密代码小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值