所以我正在尝试编写一个程序来检测图像上的鼠标点击并保存x,y位置。我一直在使用matplotlib并且我使用了基本的情节,但是当我尝试对图像使用相同的代码时,我收到以下错误:
cid = implot.canvas.mpl_connect('button_press_event',onclick) 'AxesImage'对象没有属性'canvas'
这是我的代码:
import matplotlib.pyplot as plt
im = plt.imread('image.PNG')
implot = plt.imshow(im)
def onclick(event):
if event.xdata != None and event.ydata != None:
print(event.xdata, event.ydata)
cid = implot.canvas.mpl_connect('button_press_event', onclick)
plt.show()
如果您对如何解决此问题或实现目标的更好方法有任何想法,请告诉我。非常感谢!
答案 0 :(得分:8)
问题是implot
是Artist
的子类,它绘制到canvas
实例,但不包含对画布的(易于获取)引用。您要查找的属性是figure
类的属性。
你想这样做:
ax = plt.gca()
fig = plt.gcf()
implot = ax.imshow(im)
def onclick(event):
if event.xdata != None and event.ydata != None:
print(event.xdata, event.ydata)
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()
答案 1 :(得分:3)
只需将implot.canvas
替换为implot.figure.canvas
:
cid = implot.figure.canvas.mpl_connect('button_press_event', onclick)