2014-01-12 34 views
0

我試圖通過單擊它從圖像中交互獲取點。爲此,我使用Python2.7提供的matplotlib提供的pyplot包。「越界」 - 使用PyPlot和ginput時出現錯誤

我這樣做以下列方式:

fig = plt.figure() 
self.ax = fig.add_subplot(111) 
self.ax.imshow(self.image, cmap='gray') 
self.ax.axis('image') 
self.original_points = plt.ginput(self.clicks, mouse_stop = 3, mouse_pop = 2) 
self.image[self.original_points[0]] 

但是給了我以下錯誤:

IndexError: index 382 is out of bounds for axis 0 with size 362 

好像x和y座標是顛倒的。到底是怎麼回事?

回答

1

是的,ginput返回點擊點的座標(x,y)。所以你需要改變順序。

另外請注意,您將獲得浮點座標,因此在將它們用於索引圖像之前,應確保將類型更改爲int

+0

謝謝。我什麼時候需要扭轉座標?僅當我使用它們來索引數組時,它纔是必需的嗎?他們被扭轉的原因是什麼? – PetaPetaPeta

+0

Numpy數組的排列順序爲(row,column,...),因爲這就是你通常在數學中索引矩陣的方法。由於'ginput'給出了點擊圖的一個點,你通常認爲這是一個x-y而不是y-x,那麼我想給出點(x,y)是大多數人所期望的。您顯然必須重新排列座標,使其對您的數據有意義:) –

+0

好吧,這是有道理的。我正在做一些計算機視覺,這導致了一些時髦的結果! 所以這是由於圖像的軸被視爲不同於數組的方式。 'ginput'返回(x,y)。對於繪圖:(x,y)。索引:(y,x) – PetaPetaPeta