运行时报错

来源:11-11 图像查找

weixin_慕用9360114

2024-09-21

你好!我模仿写代码运行时报了这个:
dstPts = np.float32([kp1[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
IndexError: tuple index out of range

代码如下:
from hashlib import algorithms_available

import cv2
import numpy as np

#打开两张图片
img1 = cv2.imread(‘opencv_search.png’)
img2 = cv2.imread(‘opencv_orig.png’)

#灰度化
g1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
g2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)

#创建SIFT对象
sift = cv2.SIFT.create()

#特征点检测
kp1,des1 = sift.detectAndCompute(g1,None)
kp2,des2 = sift.detectAndCompute(g2,None)

#创建匹配对对象
index_params = dict(algorithm = 1,trees = 5)
search_params = dict(checks = 50)
flann = cv2.FlannBasedMatcher(index_params,search_params)

#对描述子进行计算
matchs = flann.knnMatch(des1,des2,2)

good = []
for i,(m,n) in enumerate(matchs):
if m.distance < 0.7 * n.distance:
good.append(m)
if len(good) >= 4:
srcPts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
dstPts = np.float32([kp1[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
H, _ = cv2.findHomography(srcPts, dstPts, cv2.RANSAC, 5.0)
h, w = img1.shape[:2]
pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)
dst = cv2.perspectiveTransform(pts, H)
cv2.polylines(img2, [np.int_(dst)], True, (0, 0, 255))
else:
print(‘the number of the good is less than 4’)
exit()
ret = cv2.drawMatchesKnn(img1,kp1,img2,kp2,[good],None)
cv2.imshow(‘ret’,ret)
cv2.waitKey(0)

写回答

1回答

李超

2024-09-21

你这是啥意思,把一个浮点转成-1,1,2的形状?

0
2
weixin_慕用9360114
找到问题了,dstPts = np.float32([kp1[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)这里应该是kp2
2024-09-21
共2条回复

OpenCV三大经典项目实战 一次掌握计算机视觉核心技能

OpenCV入门到进阶:实战三大典型项目

925 学习 · 233 问题

查看课程