2015-07-20 62 views
1

我用opencv做了一些圖像處理。我試圖然後在我的繪圖儀上繪製圖像(原點在左下角),但圖像翻轉。 opencv的原點位於左上角,因此圖像的y座標被翻轉。 origin in upper leftNumpy翻轉座標系

我應該對我的要點應用什麼函數,以便它能夠在新的原點系統中正確繪圖(左下)?

編輯: 我不關心改變劇情顯示,我實際上需要點的座標翻轉。 使用np.flipud根本沒有改變點,因爲點由N×2矩陣顯示。

回答

1

你問如何翻轉numpy數組或如何顯示它?

如果你問如何翻轉陣列,看看np.flipud或等效your_data[::-1, ...]


numpy.flipud是使用上面顯示的精確切割的功能。然而,如果你不熟悉numpy切片,它更具可讀性。

爲了解釋爲什麼data[::-1, ...]會垂直翻轉陣列,您需要了解一些關於索引工作原理的信息。

一般來說,python中的索引工作方式是指定start:stop:step。其中每一個可以是無(例如:-10指定start=None,stop=-10,step=None)。

因此,::-1指定start=Nonestop=Nonestep=-1 - 換句話說,走在全序列,但有一個負步增量,有效地扭轉了序列。

...Ellipsis。在numpy中,這用於表示包含所有其他維度。

省略號避免了需要特殊情況下你的數組是二維或三維(或27維,就此而言)。如果它是二維數組,則x[::-1, ...]相當於x[::-1, :]。如果是3D陣列,則相當於x[::-1, :, :]等。

在numpy中,第一個軸是行。因此,x[::-1, ...]說:「反向的行,並留下所有其他維度單獨。這將創建一個視圖,所以內存不會被複制,並且不會創建副本。但是,對於一般情況考慮很有用,例如,左右翻轉將是x[:, ::-1, ...](或np.fliplr)。

4

問題不在於numpy,而在於matplotlib顯示數據的方式。爲了生成有效的可視化,你應該在圖片生成級別上翻轉y軸,而不是numpy分析。可以通過matplitlib API輕鬆完成軸對象:

plt.gca().invert_yaxis() 
+3

如果您使用的是matplotlib,您還可以指定'origin ='lower''或'origin ='upper''爲'imshow'。但是,我不確定OP是否是。 –