2012-09-21 107 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