【问题标题】:Reading Pixel Value Method?读取像素值方法?
【发布时间】:2012-09-22 14:15:38
【问题描述】:

我在读取像素值(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)没有输出 index out of range 的错误呢?

之后,我尝试使用 try...catch()...

【问题讨论】:

标签: opencv


【解决方案1】:

你有一个连续的内存块

size  = w*h = 300

在 w = 35 和 h = 5 时,您的等式给出

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

所以没有错误。如果这是 c++,那么即使您的数据索引大于 299,它也不会引发错误。在这种情况下,您将访问超出其界限的数据,从而导致未定义的行为。

我假设 cvGetReal2D(img,y,x) 足够聪明,可以告诉您其中一个索引大于该维度的定义大小,即使它可以解析为有效地址。

【讨论】:

  • 感谢 Hammer 的回复。我正在使用 C++。您如何获得步长值,您知道我该怎么做才能使 data[y*step +x] 足够聪明地处理异常吗?
  • 我意识到如果 width = 30 那么 widthStep 应该是 31。
  • 我做到了。只需要在 try.catch 做点什么。谢谢@Hammer。
  • 如果宽度为 30,则宽度步长应为 30。例如宽度为 4。您的第一行是 0,1,2,3。第二个是 4,5,6,7 等。这意味着您的第一列是 0,4,8,12,全部相隔 4
猜你喜欢
  • 2012-09-13
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
相关资源
最近更新 更多