python - 使用 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)
解决方案
我终于找到了如何获取当前子图对象和相应的像素值:
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)
推荐阅读
- python-3.x - 如何找到k-means的k值?
- .net - Powershell:以执行时间限制启动进程并在运行时从其 StdOut 读取
- django - 从 Redis 后端删除所有 Celery 结果
- python - 在 matplotlib 中将子图插入图时控制比例
- python - 在主题提取的评论中删除外来词的最佳方法是什么?
- settings - 我无法恢复我的 Android Studio 预览设置
- angular - 在移动制表符时调用方法 - 角度
- html - HTML Agility Pack 只为自己的元素获取 InnerText
- java - LibGDX - 音乐问题
- node.js - 未捕获(承诺)错误:FIRESTORE(4.10.1)内部断言失败:未知关系:数组包含