Numpy翻转坐标系

时间:2015-07-20 21:55:40

标签: python image opencv numpy

我用opencv做了一些图像处理。我试图然后在我的绘图仪上绘制图像(左下角的原点),但图像被翻转。 opencv的原点位于左上方,因此图像的y坐标被翻转。origin in upper left

我应该对我的点应用什么函数,以便它能在新的原点系统中正确绘制(左下角)?

编辑: 我不关心改变情节显示,我实际上需要点数'坐标翻转。 使用np.flipud并没有改变点,因为该点由N X 2矩阵显示。

2 个答案:

答案 0 :(得分:4)

问题不在于numpy,而在于matplotlib显示数据的方式。为了产生有效的可视化,您应该在图像生成级别上翻转y轴,而不是numpy分析。它可以通过matplitlib API轻松完成到axis对象:

plt.gca().invert_yaxis()

答案 1 :(得分:1)

您是否在询问如何翻转numpy数组或如何显示它?

如果您要问如何翻转数组,请查看np.flipud或等效your_data[::-1, ...]

numpy.flipud是一个使用上面显示的精确切片的函数。但是,如果你不熟悉numpy切片,它会更具可读性。

要解释为什么data[::-1, ...]将垂直翻转数组,您需要了解索引的工作原理。

通常,python中的索引通过指定start:stop:step来工作。其中每个都可以为无(例如:-10指定start=Nonestop=-10step=None)。

因此,::-1指定start=Nonestop=Nonestep=-1 - 换句话说,遍历整个序列,但以负步增量,有效地反转序列

...Ellipsis。在numpy中,这用于表示包括所有其他维度。

省略号避免了特殊情况下您的数组需要2D或3D(或27维,就此而言)的需要。如果它是2D数组,那么x[::-1, ...]相当于x[::-1, :]。如果它是3D数组,则相当于x[::-1, :, :]等等。

在numpy中,第一个轴是行。因此,x[::-1, ...]说“反转行并保留所有其他维度。这将创建一个视图,因此内存不会重复,也不会创建副本。

在行的特定情况下,您可以省略省略号。但是,考虑一般情况是有用的。例如,左右翻转将为x[:, ::-1, ...](或np.fliplr)。