OpenCV关键点位置错误



我不知道这里出了什么问题,从函数(cv2.drawMatchesKnn(中提取的点处于好位置,但从循环中提取的点将处于坏位置。在图中你可以很好地看到它。我知道可能会有一个小的转变,但它完全错过了他们。

if len(self.frame_kps) > 0:
if self.t_matcher == "flann":
matches = self.matcher.knnMatch(self.base_desc,self.frame_desc,k=2)
goodMatch=[]
good_without_list = []
for m,n in matches:
if(m.distance<matcher_dist*n.distance):
goodMatch.append([m])
good_without_list.append(n)
if(len(goodMatch)>=self.MIN_MATCH):
self.matches = cv2.drawMatchesKnn(self.base_gray,self.base_kps,gray,self.frame_kps,goodMatch,None,flags=2)
for g in good_without_list:
keyPoint = self.frame_kps[g.queryIdx]
(x1,y1) = keyPoint.pt        
cv2.circle(self.matches, (int(x1),int(y1)), 4, (255, 0, 0), 1)  

这里怎么了?

https://i.stack.imgur.com/FIziK.png

您需要将base_gray width的宽度添加到frame_kps的x坐标中,以使其在最终显示中正确显示。

这是因为您的绘图匹配将2个图像组合在一起,从而更改显示中点的最终位置。

h, w = numpy.shape(self.base_gray)
for g in goodMatch:
keyPoint = self.frame_kps[g.trainIdx]
(x1,y1) = keyPoint.pt   
x1 = x1 + w
cv2.circle(self.matches, (int(x1),int(y1)), 4, (255, 0, 0), 1)  

最新更新