使用matplotlib检测图像中的鼠标事件

时间:2013-03-30 16:59:36

标签: image-processing matplotlib mouseevent

所以我正在尝试编写一个程序来检测图像上的鼠标点击并保存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()

如果您对如何解决此问题或实现目标的更好方法有任何想法,请告诉我。非常感谢!

2 个答案:

答案 0 :(得分:8)

问题是implotArtist的子类,它绘制到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)