上面的代码提示,AttributeError: module 'cv2' has no attribute 'match_descriptors_to_keypoints'
时间: 2024-07-26 07:01:14 浏览: 61
这个错误是因为OpenCV(cv2)版本较旧,可能还没有包含`match_descriptors_to_keypoints`函数。自OpenCV 4.0以后,这个功能已被弃用,推荐使用`find correspondences`代替。如果你的OpenCV版本低于4.0,那么你需要修改这部分代码,使用旧有的方法来匹配描述符。
下面是替换后的代码片段:
```python
# 从匹配结果中提取好匹配的关键点索引
good_matches = []
for m in matches:
if m.distance < 0.75 * min(len(des1), len(des2)):
good_matches.append(m.queryIdx)
# 然后使用这些索引从两个列表中获取关键点
src_pts = np.float32([kp1[m.queryIdx] for m in good_matches])
dst_pts = np.float32([kp2[m.trainIdx] for m in good_matches])
# 继续进行后续步骤,比如计算透视变换等
```
如果需要使用其他方法,例如Brute Force matcher,可以这样替换:
```python
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2) # 获取最近邻和次近邻匹配
good_matches = []
for m, n in matches:
if m.distance < 0.75 * n.distance: # 高斯差分阈值
good_matches.append(m)
```
务必检查你的OpenCV版本,确认是否有相应的函数可用。同时,保持更新至最新稳定版本会有更多的新特性支持。
阅读全文