1
我想用鼠標繪製圖像上的點。 問題:出現圖像,但是當我點擊鼠標時,沒有任何繪圖(即使點擊幾次)。使用鼠標繪製Python中圖像上的點,用Matplotlib
我的Python版本是Python 2.7,帶有Anaconda和IPython控制檯。 在運行腳本之前,在Ipython控制檯中鍵入%pylab。
這裏是我的代碼:
import numpy as np
from matplotlib import pyplot as plt
#Some code here [. . .]
fig, ax = plt.subplots(1)
ax.imshow(img, interpolation = 'bicubic')
'''preventing plot from rescaling image:'''
ax.set_xlim([0.0, img.shape[1]])
ax.set_ylim([img.shape[0], 0.0])
ax.hold(True)
ax.autoscale = False
#ax.plot(100,100, 'ro') # This works
class MouseMonitor:
flag = True
x = 0.
y = 0.
fig = None
axes = None
def __init__(self, fig, ax):
self.axes = ax
self.fig = fig
def __call__(self, event):
if self.flag:
print('({}, {})'.format(event.xdata, event.ydata))
self.flag = False
else:
d = np.linalg.norm([event.xdata - self.x, event.ydata - self.y])
print('({}, {})\n\n distance between points: {} m\n\n-------------------\n'.format(event.xdata, event.ydata, d))
self.flag = True
self.x = event.xdata
self.y = event.ydata
self.axes.plot(self.y, self.x, 'ro', linewidth = 5) #This don't work
mouse = MouseMonitor(fig, ax)
cid = fig.canvas.mpl_connect('button_press_event', mouse)
您需要在回調中添加一個'self.axes.figure.canvas.draw_idle()'調用,直到畫布重繪爲止。 OO方法很懶,以避免不必要的重繪。 – tacaswell
'self.fig.canvas.draw_idle()'也會工作,沒有看到你被捕獲了。 – tacaswell
謝謝你這麼多tcaswell。它工作正常。 – MikeTeX