我用opencv做了一些圖像處理。我試圖然後在我的繪圖儀上繪製圖像(原點在左下角),但圖像翻轉。 opencv的原點位於左上角,因此圖像的y座標被翻轉。 Numpy翻轉座標系
我應該對我的要點應用什麼函數,以便它能夠在新的原點系統中正確繪圖(左下)?
編輯: 我不關心改變劇情顯示,我實際上需要點的座標翻轉。 使用np.flipud根本沒有改變點,因爲點由N×2矩陣顯示。
我用opencv做了一些圖像處理。我試圖然後在我的繪圖儀上繪製圖像(原點在左下角),但圖像翻轉。 opencv的原點位於左上角,因此圖像的y座標被翻轉。 Numpy翻轉座標系
我應該對我的要點應用什麼函數,以便它能夠在新的原點系統中正確繪圖(左下)?
編輯: 我不關心改變劇情顯示,我實際上需要點的座標翻轉。 使用np.flipud根本沒有改變點,因爲點由N×2矩陣顯示。
你問如何翻轉numpy數組或如何顯示它?
如果你問如何翻轉陣列,看看np.flipud
或等效your_data[::-1, ...]
numpy.flipud
是使用上面顯示的精確切割的功能。然而,如果你不熟悉numpy切片,它更具可讀性。
爲了解釋爲什麼data[::-1, ...]
會垂直翻轉陣列,您需要了解一些關於索引工作原理的信息。
一般來說,python中的索引工作方式是指定start:stop:step
。其中每一個可以是無(例如:-10
指定start=None
,stop=-10
,step=None
)。
因此,::-1
指定start=None
,stop=None
,step=-1
- 換句話說,走在全序列,但有一個負步增量,有效地扭轉了序列。
...
是Ellipsis
。在numpy中,這用於表示包含所有其他維度。
省略號避免了需要特殊情況下你的數組是二維或三維(或27維,就此而言)。如果它是二維數組,則x[::-1, ...]
相當於x[::-1, :]
。如果是3D陣列,則相當於x[::-1, :, :]
等。
在numpy中,第一個軸是行。因此,x[::-1, ...]
說:「反向的行,並留下所有其他維度單獨。這將創建一個視圖,所以內存不會被複制,並且不會創建副本。但是,對於一般情況考慮很有用,例如,左右翻轉將是x[:, ::-1, ...]
(或np.fliplr
)。
問題不在於numpy,而在於matplotlib顯示數據的方式。爲了生成有效的可視化,你應該在圖片生成級別上翻轉y軸,而不是numpy分析。可以通過matplitlib API輕鬆完成軸對象:
plt.gca().invert_yaxis()
如果您使用的是matplotlib,您還可以指定'origin ='lower''或'origin ='upper''爲'imshow'。但是,我不確定OP是否是。 –