我正在尝试允许用户旋转/反转正在显示的图像。 代码的简化版本:
import numpy as np
from matplotlib.widgets import Button
from matplotlib.transforms import Affine2D
import matplotlib.pyplot as plt
rot90 = np.array([[0,-1,0],[1,0,0],[0,0,1]])
I = np.array([[1,0,0],[0,1,0],[0,0,1]])
fig, axes = plt.subplots(nrows=1,ncols=1)
i = axes.imshow(np.random.rand(100).reshape((10,10)))
bax = fig.add_axes([0.025,0.025,0.05,0.05])
tr = Affine2D().set_matrix(I)
i.set_transform(tr)
b = Button(bax,label='rot90')
def on_press(event):
mat = i.get_transform().get_matrix()
newmat = np.dot(rot90,mat)
newtr = Affine2D().set_matrix(newmat)
i.set_transform(newtr)
fig.canvas.draw()
b.on_clicked(on_press)
plt.show()
我知道数据传递给按钮,但按下时没有任何反应,也没有错误。
我认为主要的问题是我真的不知道这些转变是如何运作的。
仅供上下文使用:
我将此用于3D图像查看器,以显示模板Brain nifti图像上的PLS回归的潜在变量。显示3个切片(投影),但有时由于模板加载其中一个切片的方式需要围绕轴旋转或反转。
由于我也使用鼠标交互来移动3D空间,我还需要坐标系旋转和反转。而且我不想翻转或旋转正在显示的实际数组,因为这将需要更多的代码(我认为)。