我在Windows上并在C ++上使用opencv 2.4.2。
我用imread
读取了一个图像并将其放在Mat对象中。
之后,我使用Mat类的函数ptr
获取原始数据的指针。
我想知道当图像包含步幅时如何工作imread
。 Mat的数据或像素数据是否有进步?
附加信息:我需要原始数据,因为我使用的是用数组编写的代码,我不想为Mat类更改它。
答案 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