首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【计算机视觉】基于SIFT算法的图像拼接小项目(精炼137行代码&模块化&拼接效果优良)

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

作者头像
YY的秘密代码小屋
发布2025-05-13 08:13:29
发布2025-05-13 08:13:29
2710
举报
文章被收录于专栏:C++系列C++系列

一.效果演示:

二.使用说明:

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

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

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

4.每段代码都有注释

三.代码模块&流程演示

四.部分代码

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.效果演示:
  • 二.使用说明:
    • 1.实测项目在低像素下(1080p)下,拼接效果优良————可以通过修改照片像素实现更好的拼接效果
    • 2.下载压缩包解压后,把文件拖入pycharm下即可
    • 3.解压后,修改文件下文件名即可替换成自己需要的图片
    • 4.每段代码都有注释
  • 三.代码模块&流程演示
  • 四.部分代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档