使用Opencv C ++跨越图像

时间:2012-07-20 02:48:05

标签: image visual-c++ opencv stride

我在Windows上并在C ++上使用opencv 2.4.2。 我用imread读取了一个图像并将其放在Mat对象中。 之后,我使用Mat类的函数ptr获取原始数据的指针。 我想知道当图像包含步幅时如何工作imread。 Mat的数据或像素数据是否有进步?

附加信息:我需要原始数据,因为我使用的是用数组编写的代码,我不想为Mat类更改它。

1 个答案:

答案 0 :(得分:0)

步幅是cv :: Mat中的每一个新像素行都不会在最后一行结束后开始。 这是因为如果内存以4bytes的倍数开始,内存会更快 - 所以只有一行中的字节数(像素数*颜色数)不是4的倍数才会很重要。

你可以检查.isContinuous()如果没有步幅

将返回true

访问图像最安全的方法是遍历所有行,并使用.ptr(row)获取指向行开头的指针,然后对该行进行任何处理。

如果你需要将opencv与其他lib混合使用,你可以创建一个cv :: mat,它将使用你自己的内存来存储数据,你可以告诉opencv这个没有任何进展

有关详细信息,请参阅http://opencv.willowgarage.com/documentation/cpp/core_basic_structures.html