首页 > 解决方案 > 使用 Matplotlib 鼠标事件获取图像的 rgba 值

问题描述

我目前正在使用 imshow 方法单击 matplotlib 图像对象时获取 RGBA 值。

我能够获得鼠标事件的坐标 x,y,但不能从图像中获得强度值。由于我的工具栏以令人讨厌的方式实时显示这些信息,我想这应该是可能的,但尽管我努力了,但我还是没有找到方法。可以通过在我的图像中的矩阵坐标处获取强度值来获取该值,这是一个 Numpy 对象,但在我的情况下,因为我使用了几个子图并且我不知道如何访问好的对象,我我正在寻找一种更直接或更直接的方式来访问它。

有没有什么简单的方法可以只使用 matplotlib 库来做到这一点?

这是一个测试代码。我想分别在子图 1 和 2 上单击时获得 RGBA 值 (0,0,0,1), (0,0,0,0.5)。

import numpy as np
import matplotlib
import matplotlib.pylab as plt 
matplotlib.use("Qt5Agg")

black = np.zeros((100,100,4))

for j in range(1,3):
    im = black.copy()
    im[:,:,3] = 1/j
    plt.subplot(1,2,j)
    plt.imshow(im)

def onclick(event):
    xdata = event.xdata
    ydata = event.ydata
    x = event.x
    y = event.y
    #rgba = event.some_attributes
    print(x,y,xdata,ydata)
    #print(rgba)

plt.gcf().canvas.mpl_connect('button_press_event', onclick)
plt.show(block=True)



标签: pythonmatplotlibmouseeventimshowrgba

解决方案


我终于找到了如何获取当前子图对象和相应的像素值:

import numpy as np
import matplotlib
import matplotlib.pylab as plt 
matplotlib.use("Qt5Agg")

black = np.zeros((100,100,4))

for j in range(1,3):
    im = black.copy()
    im[:,:,3] = 1/j
    plt.subplot(1,2,j)
    plt.imshow(im)

def onclick(event):
    xdata = event.xdata
    ydata = event.ydata
    x = event.x
    y = event.y
    rgba = event.inaxes.get_images()[0].get_cursor_data(event)
    print(x,y,xdata,ydata)
    print(rgba)

plt.gcf().canvas.mpl_connect('button_press_event', onclick)
plt.show(block=True)

推荐阅读