2012-09-21 141 views
0

我在讀取像素值(w = 30,h = 10)時遇到問題。假設我正在使用閱讀像素值方法?

  1. int readValue = cvGetReal2D(img,y,x);和
  2. int readValue = data [y * step + x];

可以說我試圖使用(1)和(2)方法在w = 35,h = 5時訪問像素值。 (1)會輸出索引超出範圍的錯誤。但爲什麼(2)不會輸出索引超出範圍的錯誤?

在那之後,我想使用的try ... catch()...

+0

這是什麼語言? C++? C#? – Hammer

+0

看看:http://stackoverflow.com/questions/12512632/opencv-matrix-values-display/12514307#12514307 – masad

+0

我會看看它。謝謝。 – Mzk

回答

1

你的

size = w*h = 300 

在W = 35和h = 5內存連續塊你的方程給出

data[5*30+35] = data[190] < data[300] 

所以沒有錯誤。如果這是C++,那麼即使數據中的索引大於299,也不會拋出錯誤。在這種情況下,您將訪問超出其範圍的數據,導致未定義的行爲。

我認爲cvGetReal2D(img,y,x)足夠聰明,可以告訴你其中一個索引大於該維度的定義大小,即使它可以解析爲有效地址。

+0

謝謝你的迴應錘子。我正在使用C++。你如何獲得步驟值,並且你知道我能做些什麼,以便數據[y * step + x]足夠聰明來處理異常? – Mzk

+0

我意識到,如果寬度= 30那麼widthStep應該是31. – Mzk

+0

我做到了。只需在try.catch.Thanks @Hammer上做些什麼。 – Mzk