Jupyter笔记本:注册鼠标位置在显示的图像(jpg/png)上单击(移动)

576*_*76i 5 python matplotlib mouseevent jupyter-notebook

使用 Python 3.6+、Jupyter 笔记本和 matplotlib,我想了解如何通过将鼠标移到图像上和/或单击位置来获取图像的 x,y 位置

我使用任何图像,例如尺寸为 966 x 525 像素的 png。

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

fig = plt.figure(figsize=(20,30))

img=mpimg.imread('ausgabe.png')
imgplot = plt.imshow(img)
plt.show();
Run Code Online (Sandbox Code Playgroud)

stackoverflow 上的许多建议解决方案都涉及将事件连接到 matplotlib,例如

fig.canvas.mpl_connect('button_press_event', onclick)
Run Code Online (Sandbox Code Playgroud)

(请参阅使用 matplotlib 存储鼠标单击事件坐标)

但在 Jupyter 中却没有反应。相反,单击图像有时会将其放大。

在 Jupyter 中显示 png 以便我可以收集(=打印)点击位置或使用收集到的信息重新运行单元格的好方法是什么?

mar*_*jay 8

您可以使用本机 Tk 后端,并且可以通过这种方式检索鼠标单击位置。例如

%matplotlib tk
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

fig = plt.figure(figsize=(20,30))

img=mpimg.imread('ausgabe.png')

def onclick(event):
    ix, iy = event.xdata, event.ydata
    print(ix, iy)

cid = fig.canvas.mpl_connect('button_press_event', onclick)

imgplot = plt.imshow(img)
plt.show()
Run Code Online (Sandbox Code Playgroud)

将弹出一个单独的 tk 窗口,当您单击时,x,y 位置将打印在笔记本中。如果这不起作用,您可能需要使用%matplotlib qt5甚至%matplotlib qt4