知道了单应变换矩阵后如何将两幅图拼接
时间: 2024-03-25 10:35:41 浏览: 225
SURF算法+单应矩阵+RANSAC算法实现拼接
3星 · 编辑精心推荐
知道单应矩阵 H 后,可以使用 OpenCV 的 warpPerspective 函数将第二幅图像变换到第一幅图像的坐标系中,然后将两幅图像拼接在一起。以下是一个简单的示例代码:
```
import cv2 as cv
import numpy as np
# 读取图像并转换为灰度图像
img1 = cv.imread('image1.jpg')
img2 = cv.imread('image2.jpg')
gray1 = cv.cvtColor(img1, cv.COLOR_BGR2GRAY)
gray2 = cv.cvtColor(img2, cv.COLOR_BGR2GRAY)
# 计算 SIFT 特征点和描述符
sift = cv.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(gray1, None)
kp2, des2 = sift.detectAndCompute(gray2, None)
# 匹配特征点
bf = cv.BFMatcher(cv.NORM_L2, crossCheck=True)
matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x: x.distance)
# 获取匹配点对
pts1 = np.float32([kp1[m.queryIdx].pt for m in matches]).reshape(-1, 1, 2)
pts2 = np.float32([kp2[m.trainIdx].pt for m in matches]).reshape(-1, 1, 2)
# 计算单应矩阵
H, _ = cv.findHomography(pts2, pts1, cv.RANSAC, 5.0)
# 将第二幅图像变换到第一幅图像坐标系中
result = cv.warpPerspective(img2, H, (img1.shape[1] + img2.shape[1], img1.shape[0]))
# 将两幅图像拼接在一起
result[0:img1.shape[0], 0:img1.shape[1]] = img1
# 显示拼接结果
cv.imshow('Stitched Image', result)
cv.waitKey(0)
cv.destroyAllWindows()
```
其中,findHomography 函数使用 RANSAC 算法估计单应矩阵,warpPerspective 函数将第二幅图像变换到第一幅图像的坐标系中,然后使用 NumPy 的切片操作将两幅图像拼接在一起。
阅读全文