python用sift提取两张图象的共同关键点
时间: 2023-06-30 20:27:22 浏览: 63
首先,需要导入OpenCV库和numpy库:
```python
import cv2
import numpy as np
```
然后,读取需要提取特征点的两张图片,例如:
```python
img1 = cv2.imread('img1.jpg')
img2 = cv2.imread('img2.jpg')
```
接下来,使用SIFT算法提取关键点和特征描述符:
```python
sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
```
其中,kp1和kp2为关键点列表,des1和des2为特征描述符列表。
接着,使用FLANN匹配算法进行关键点匹配:
```python
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1, des2, k=2)
```
最后,筛选出最佳关键点匹配,例如,使用低于0.7的比率测试来确定最佳匹配:
```python
good = []
for m, n in matches:
if m.distance < 0.7 * n.distance:
good.append(m)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, good, None, flags=2)
```
此时,img3即为提取出的两张图片的共同关键点。