首页 > 其他分享 >《OpenCV》—— 图像拼接

《OpenCV》—— 图像拼接

时间:2024-09-30 19:48:30浏览次数:8  
标签:kps show matches imageB imageA cv2 OpenCV 拼接 图像

  • 下面是两张需要拼接的图片
    在这里插入图片描述
  • 完整代码:
import cv2
import numpy as np
import sys


def cv_show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)


def detectAndDescribe(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    descriptor = cv2.SIFT_create()

    (kps, des) = descriptor.detectAndCompute(gray, None)

    kps_float = np.float32([kp.pt for kp in kps])

    return (kps, kps_float, des)


''' 读取拼接图片 '''
imageA = cv2.imread('A.jpg')
cv_show('imageA', imageA)
imageB = cv2.imread('B.jpg')
cv_show('imageB', imageB)

''' 计算图片特征点及描述符 '''
(kpsA, kps_floatA, desA) = detectAndDescribe(imageA)
(kpsB, kps_floatB, desB) = detectAndDescribe(imageB)

''' 建立暴力匹配器BFMatcher,在匹配大型训练集时使用 FlannBasedMatcher 速度更快 '''
matcher = cv2.BFMatcher()

rawMatches = matcher.knnMatch(desB, desA, 2)
good = []
matches = []
for m in rawMatches:
    if len(m) == 2 and m[0].distance < 0.65 * m[1].distance:
        good.append(m)
        matches.append((m[0].trainIdx, m[0].queryIdx))
print(len(good))
print(matches)

vis = cv2.drawMatchesKnn(imageB, kpsB, imageA, kpsA, good, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv_show("Keypoint Matches", vis)

""" 透视变换 """
if len(matches) > 4:    # 当筛选后的匹配对大于4时,计算视角变换矩阵
    # 获取匹配对的点坐标
    ptsA = np.float32([kps_floatA[i] for (i, _) in matches])
    ptsB = np.float32([kps_floatB[i] for (_, i) in matches])

    (H, mask) = cv2.findHomography(ptsB, ptsA, cv2.RANSAC, 10)
else:
    print('图片未找到4个以上的匹配点')
    sys.exit()

result = cv2.warpPerspective(imageB, H, (imageB.shape[1] + imageA.shape[1], imageB.shape[0]))
cv_show('resulB', result)

# 将图片A传入resultB图片最左端
result[0:imageA.shape[0], 0:imageA.shape[1]] = imageA
cv_show('result', result)
  • 结果如下:
    在这里插入图片描述

标签:kps,show,matches,imageB,imageA,cv2,OpenCV,拼接,图像
From: https://blog.csdn.net/weixin_73504499/article/details/142662977

相关文章

  • 《OpenCV 计算机视觉》—— 视频背景建模
    完整代码如下:importcv2cap=cv2.VideoCapture('test.avi')"""getstructuringElement(shape,ksize,anchor=None)得到一个卷积核。主要用于后续的腐蚀、膨胀、开、闭等运算。参数:shape:设定卷积核的形状,可选如下三个参数:①:MORPH_RECT(矩形卷积核)......
  • 【代码实现】opencv 高斯模糊和pytorch 高斯模糊
    wiki百科GaussianBlur,也叫高斯平滑,是在AdobePhotoshop、GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪声以及降低细节层次。opencv实现opencv实现高斯滤波有两种方式,1、是使用自带的cv2.GaussianBlur,2、自己构造高斯kernel,然后调用cv......
  • OpenCV(图像对比度增强)
    目录1.直方图均衡化2.自适应直方图均衡化3.限制对比度自适应直方图均衡化4.线性对比度拉伸5.Gamma校正6.Retinex方法7.多尺度对比度增强8.方法选择与应用场景总结增强图像对比度是图像处理中的一个重要步骤,旨在提高图像中不同亮度区域之间的差异,使细节更加清晰和明显......
  • 加油站智能视频监控预警系统(AI识别烟火打电话抽烟) Python 和 OpenCV 库
    加油站作为存储和销售易燃易爆油品的场所,是重大危险源之一,随着科技的不断发展,智能视频监控预警系统在加油站的安全保障方面发挥着日益关键的作用,尤其是其中基于AI的烟火识别、抽烟识别和打电话识别功能,以及其独特的系统组网方式。加油站重大危险源监测(一)油品的易燃易爆性加油站储......
  • [数据集][图像分类]骨关节炎严重程度分类数据集14038张4分类
    数据集类型:图像分类用,不可用于目标检测无标注文件数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片图片数量(jpg文件个数):14038分类类别数:4类别名称:[“grade0”,“grade2”,“grade3”,“grade4”]每个类别图片数:类别名称图片数grade08080grade23691grade31843gra......
  • OPENCV判断图像中目标物位置及多目标物聚类
    文章目录在最近的项目中,又碰到一个有意思的问题需要通过图像算法来解决。就是显微拍摄的到的医疗图像中,有时候目标物比较偏,也就是在图像的比较偏的位置,需要通过移动样本,将目标物置于视野正中央,然后再次进行拍摄。就类似于下面的图像:基于这个需求,在图像上就需要使......
  • 高点摄像山火烟雾检测数据集 共2890张图像,分辨率1920×1080,标注采用json格式,标注了每
    高点摄像山火烟雾检测数据集(并按照低、中详细标注烟雾浓度)。主要针对初期山火,任何野火检测系统的最重要目标是在火势扩大之前及时检测到火灾。在初期阶段,野火由非火焰性的燃烧烟雾组成,热量相对较低。在这个阶段识别火灾能够提供最佳的抑制机会。在这个阶段通常看不到火焰;因此,任......
  • opencv实战项目二十九:GrabCut分割人像
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、GrabCut介绍:二、opencv实现:三、效果:前言在数字图像处理领域,人像分割是一项极具挑战性的任务,它旨在从复杂背景中准确提取出人物图像。随着技术的不断发展,人像分割技术在许多领域都展......
  • 《OpenCV 计算机视觉》—— Harris角点检测、SIFT特征检测
    文章目录一、Harris角点检测1.基本思想2.检测步骤3.OpenCV实现二、SIFT特征检测1.SIFT特征检测的基本原理2.SIFT特征检测的特点3.OpenCV实现一、Harris角点检测OpenCV中的Harris角点检测是一种基于图像灰度值变化的角点提取算法,它通过计算每个像素点的响应函......
  • 基于OpenCV的实时年龄与性别识别(支持CPU和GPU)
    关于深度实战社区我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万+粉丝,拥有2篇国家级人工智能发明专利。社区特色:深度实战算法创新获取全部完整项目......