在matplotlib中翻转图像

时间:2014-07-14 22:13:04

标签: python matplotlib

我试图使用matplotlib绘制图像,它顺时针旋转90度,这似乎是一个常见的问题。所以我需要逆时针旋转90度以显示我的实际图像。然而,当我试图绘制数据的转置时,我收到一条错误消息,上面写着"图像数据的无效尺寸"此外,我还试图将原点设置为较低,因为这似乎也是一种解决此类问题的方法,但只是将其翻过x轴。我该如何解决?这是我的原始代码

from dipy.reconst.dti import color_fa
cfa = color_fa(FA, tenfit.evecs)
cfa_img = nib.Nifti1Image(cfa.astype(np.float32), img.get_affine())
data_cfa = cfa_img.get_data()
import matplotlib.pyplot as plt
plt.figure('color_fa')
plt.imshow(data_cfa[:,:,6,:])
plt.show()

因此它显示图像的切片6为192x192

当我将imshow行更改为

plt.imshow(data_cfa[:,:,6,:].T)

我收到了错误消息。

我是python和matplotlib的新手,所以任何帮助都将不胜感激!

2 个答案:

答案 0 :(得分:2)

问题在于您尝试转置三维图像。图像的尺寸为N x M x 3,您希望有一个M x N x 3阵列(旋转但保持颜色平面完整)。

使用.T方法,您将获得一个尺寸为3 x M x N的数组,这不是您想要的。这是错误的来源。

而不是.T使用.transpose(1,0,2)。这将转移两个第一轴,但保留第三个轴。现在应该根据需要旋转图像:

plt.imshow(data_cfa[:,:,6,:].transpose(1,0,2))

请参阅np.transpose的文档:http://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html

(如果您的图像是N x M灰度图像,则.T技巧将是正确的。)

答案 1 :(得分:1)

尝试scipy.ndimage.rotate(请参阅下面的示例代码)。与交换所有轴的.T不同(请参阅@DrV的答案),ndimage.rotate旨在单独保留颜色信息。它还可以处理任意旋转(例如31.4度)。有关更广泛的示例,请查看http://scipy-lectures.github.io/advanced/image_processing/#geometrical-transformations

data_cfa = rand(10,10,7,3)

plt.subplot(211)
plt.imshow(data_cfa[:,:,6,:])
plt.title('Original')

plt.subplot(212)
plt.imshow(ndimage.rotate(data_cfa[:,:,6,:], 90))
plt.title('Rotated by 90')

plt.show()