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

Python Jupyter笔记本:在显示的图像上注册鼠标位置点击(移动)(jpg/png),python,matplotlib,jupyter-notebook,mouseevent,Python,Matplotlib,Jupyter Notebook,Mouseevent,使用Python3.6+、Jupyter笔记本和matplotlib,我想要 了解如何通过 在其上移动鼠标和/或单击该位置 我使用任何图像,例如png大小的966 x 525像素 %matplotlib inline import matplotlib.pyplot as plt import matplotlib.image as mpimg fig = plt.figure(figsize=(20,30)) img=mpimg.imread('ausgabe.png') imgplot

使用Python3.6+、Jupyter笔记本和matplotlib,我想要 了解如何通过 在其上移动鼠标和/或单击该位置

我使用任何图像,例如png大小的966 x 525像素

%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();
许多关于stackoverflow的建议解决方案都涉及连接 matplotlib的事件,如

fig.canvas.mpl_connect('button_press_event', onclick)
(见附件)

但在Jupyter,这根本不起作用。相反,单击图像有时会放大图像

用Jupyter显示png的好方法是什么
(=打印)单击位置-或使用收集的信息重新运行单元格

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

%matplotlib-tk
将matplotlib.pyplot作为plt导入
将matplotlib.image导入为mpimg
图=plt.图(图尺寸=(20,30))
img=mpimg.imread('ausgabe.png')
def onclick(事件):
ix,iy=event.xdata,event.ydata
打印(ix,iy)
cid=fig.canvas.mpl\u connect('button\u press\u event',onclick)
imgplot=plt.imshow(img)
plt.show()
将弹出一个单独的tk窗口,当您单击时,x、y位置将打印在笔记本中。
如果不起作用,您可能需要使用
%matplotlib qt5
甚至
%matplotlib qt4
我同意上面关于切换到tk的帖子。 我唯一想补充的是,为了在图像上点击鼠标,只需使用
ginput()

结果: [(0.052688172043010795, 0.06725720343611918), (1.9451612903225803, 0.8951697538724439),
(3.9854838709677414,-0.7310870416274797)]

正如@ImportanceOfBeingErnest所指出的那样

%matplotlib笔记本添加到您的程序中,您将能够注册单击并与图形交互,如放大/缩小、移动和重置。下面是结果的显示方式

之前:

之后:
你是否考虑使用<代码> %MatPLTLIB笔记本< /COD>后端?这将允许像在python脚本中一样使用事件。否则,您需要编写一些在浏览器中执行的JavaScript来检索图像中的坐标。是的,我尝试了
%matplotlib notebook
而不是
%matplotlib inline
——这导致图像根本无法打印。导航栏会闪烁一秒钟,然后什么都没有。我发现的示例没有使用Jupyter,所以我假设它们只使用常规python。我还尝试在谷歌上搜索JavaScript示例,这些示例会显示图像的x/y位置,但找不到任何有用的东西。我想当你尝试时,你没有重新启动内核?这是一个很好的提示,在重新启动内核后,我会得到一个图像。。。现在我只需要再研究一下如何以这种方式获得这个职位
import matplotlib
matplotlib.use('TkAgg')

pil = Image.open("..\img\japan.jpg")
im = array(pil)
imshow(im)

pts = ginput(3) #number of clicks
print(pts)