我正在使用sift实现以及“使用Python编程计算机视觉”中的代码。
在vision.py中使用plotMatches函数(相当于本书的plot_matches()函数)时,绘制的某些点甚至不在图像上:
正如您所看到的,大多数点都不在图像上。
这可能是我必须对plotMatches()函数进行更改的结果:
for i, m in enumerate(matchscores):
if i > 0:
lab.plot([locs1[i][1], locs2[i][1] + cols1],
[locs1[i][0], locs2[i][0]], 'c')
原始代码:
for i, m in enumerate(matchscores):
if i > 0:
lab.plot([locs1[i][1], locs2[m][1] + cols1],
[locs1[i][0], locs2[m][0]], 'c')
会抛出以下错误:
Traceback (most recent call last):
File "/home/peter-brown/AI/Markus/ImageRecognition.py", line 37, in <module>
sch.plotMatches(image, image2, l1, l2, matches, show_below=False)
File "/home/peter-brown/AI/Markus/vision.py", line 199, in plotMatches
lab.plot([locs1[i][1], locs2[m][1] + cols1],
IndexError: index 1 is out of bounds for axis 0 with size 1
通过更改代码中使用的任何“m”,程序可以正常工作,但输出不正确。
为什么输出与图像不对应,如何更改plotMatches功能?
答案 0 :(得分:1)
在matplotlib
中,x
和y
坐标会被翻转。从您的图像看起来,您将所有x
坐标解释为y
坐标,反之亦然。从您的功能来看,这是一个简单的改变:
for i, m in enumerate(matchscores):
if i > 0:
lab.plot([locs1[i][0], locs2[i][0] + cols1],
[locs1[i][1], locs2[i][1]], 'c')