Python matplotlib中的翻转图像
我试图用matplotlib绘制一幅图像,结果它顺时针旋转了90度,这似乎是一个常见的问题。所以我需要将它逆时针旋转90度,以显示我的实际图像。然而,当我试图绘制数据的转置时,我收到一条错误消息,上面写着“图像数据的尺寸无效”。此外,我还试图将“原点”设置为较低,因为这似乎也是解决此类问题的一种方法,但这只会使它在x轴上翻转。我该如何解决这个问题?这是我的原始代码Python matplotlib中的翻转图像,python,matplotlib,Python,Matplotlib,我试图用matplotlib绘制一幅图像,结果它顺时针旋转了90度,这似乎是一个常见的问题。所以我需要将它逆时针旋转90度,以显示我的实际图像。然而,当我试图绘制数据的转置时,我收到一条错误消息,上面写着“图像数据的尺寸无效”。此外,我还试图将“原点”设置为较低,因为这似乎也是解决此类问题的一种方法,但这只会使它在x轴上翻转。我该如何解决这个问题?这是我的原始代码 from dipy.reconst.dti import color_fa cfa = color_fa(FA, tenfit.ev
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,因此非常感谢您的帮助 问题在于,您正在尝试将图像转换为三维。图像的尺寸为nxmx3,您希望有一个mxnx3数组(旋转,但保持颜色平面不变) 使用
.T
方法,您将不幸地得到一个尺寸为3 x M x N的数组,这不是您想要的。这就是错误的来源
不要使用.T
而使用.transpose(1,0,2)
。这将转置前两个轴,但保留第三个轴不变。现在,图像应该按照您的需要进行旋转:
plt.imshow(data_cfa[:,:,6,:].transpose(1,0,2))
参见np.transpose
的文档:
(如果您的图像是N x M灰度图像,那么
.T
技巧应该是正确的。)问题是您正在尝试用三维转置图像。图像的尺寸为nxmx3,您希望有一个mxnx3数组(旋转,但保持颜色平面不变)
使用.T
方法,您将不幸地得到一个尺寸为3 x M x N的数组,这不是您想要的。这就是错误的来源
不要使用.T
而使用.transpose(1,0,2)
。这将转置前两个轴,但保留第三个轴不变。现在,图像应该按照您的需要进行旋转:
plt.imshow(data_cfa[:,:,6,:].transpose(1,0,2))
参见np.transpose
的文档:
(如果您的图像是N x M灰度图像,那么
.T
技巧应该是正确的。)问题是您正在尝试用三维转置图像。图像的尺寸为nxmx3,您希望有一个mxnx3数组(旋转,但保持颜色平面不变)
使用.T
方法,您将不幸地得到一个尺寸为3 x M x N的数组,这不是您想要的。这就是错误的来源
不要使用.T
而使用.transpose(1,0,2)
。这将转置前两个轴,但保留第三个轴不变。现在,图像应该按照您的需要进行旋转:
plt.imshow(data_cfa[:,:,6,:].transpose(1,0,2))
参见np.transpose
的文档:
(如果您的图像是N x M灰度图像,那么
.T
技巧应该是正确的。)问题是您正在尝试用三维转置图像。图像的尺寸为nxmx3,您希望有一个mxnx3数组(旋转,但保持颜色平面不变)
使用.T
方法,您将不幸地得到一个尺寸为3 x M x N的数组,这不是您想要的。这就是错误的来源
不要使用.T
而使用.transpose(1,0,2)
。这将转置前两个轴,但保留第三个轴不变。现在,图像应该按照您的需要进行旋转:
plt.imshow(data_cfa[:,:,6,:].transpose(1,0,2))
参见np.transpose
的文档:
(如果您的图像是N x M灰度图像,那么
.T
技巧应该是正确的。)尝试scipy.ndimage.rotate
(参见下面的示例代码)。与交换所有轴的.T
(请参阅@DrV的答案)不同,ndimage.rotate
的设计目的是保留颜色信息。它还可以处理任意旋转(例如31.4度)。有关更广泛的示例,请参阅
尝试
scipy.ndimage.rotate
(参见下面的示例代码)。与交换所有轴的.T
(请参阅@DrV的答案)不同,ndimage.rotate
的设计目的是保留颜色信息。它还可以处理任意旋转(例如31.4度)。有关更广泛的示例,请参阅
尝试
scipy.ndimage.rotate
(参见下面的示例代码)。与交换所有轴的.T
(请参阅@DrV的答案)不同,ndimage.rotate
的设计目的是保留颜色信息。它还可以处理任意旋转(例如31.4度)。有关更广泛的示例,请参阅
尝试
scipy.ndimage.rotate
(参见下面的示例代码)。与交换所有轴的.T
(请参阅@DrV的答案)不同,ndimage.rotate
的设计目的是保留颜色信息。它还可以处理任意旋转(例如31.4度)。有关更广泛的示例,请参阅
您好,这可能很好地回答了这个问题-但我们总是希望您能给出一点解释,而不仅仅是一段代码:)不要忘记,很多新手来到S/O,他们可能不理解您所做的更改或更改的原因。如果你告诉他们,他们可以从你的专业知识中学习:)嗨,这可能很好地回答了这个问题-但是一点解释总是值得的,而不仅仅是一段代码:)不要忘记,很多新手来到S/O,他们可能不明白你改变了什么或为什么。如果你告诉他们,他们可以从你的专业知识中学习:)嗨,这可能很好地回答了这个问题-但是一点解释总是值得的,而不仅仅是一段代码:)不要忘记,很多新手来到S/O,他们可能不明白你改变了什么或为什么。如果你告诉他们,他们可以从你的专业知识中学习:)嗨,这可能很好地回答了这个问题——但一点解释总是可取的