用surf特征检测,用orb描述的组合进行图像拼接,python代码
时间: 2024-05-08 20:19:10 浏览: 68
利用 SIFT 实现图像拼接 python 代码
5星 · 资源好评率100%
以下是一个使用surf特征检测、orb描述和opencv库进行图像拼接的python代码:
```python
import cv2
import numpy as np
# 读取图片
img1 = cv2.imread('img1.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('img2.jpg', cv2.IMREAD_GRAYSCALE)
# 初始化SURF检测器
surf = cv2.xfeatures2d.SURF_create()
# 检测关键点和描述符
kp1, des1 = surf.detectAndCompute(img1, None)
kp2, des2 = surf.detectAndCompute(img2, None)
# 初始化ORB描述符
orb = cv2.ORB_create()
# 使用ORB描述符匹配关键点
matcher = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = matcher.match(des1, des2)
# 选择最佳匹配点
matches = sorted(matches, key = lambda x:x.distance)
good_matches = matches[:10]
# 获取匹配点的坐标
src_pts = np.float32([ kp1[m.queryIdx].pt for m in good_matches ]).reshape(-1,1,2)
dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good_matches ]).reshape(-1,1,2)
# 计算透视变换矩阵
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
# 图像拼接
result = cv2.warpPerspective(img1, M, (img1.shape[1]+img2.shape[1], img1.shape[0]))
result[0:img2.shape[0], 0:img2.shape[1]] = img2
# 显示结果
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
希望这个代码可以对你有所帮助。
阅读全文