2

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

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

4

1 回答 1

2

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

如果没有步幅,您可以检查 .isContinuous() 将返回 true

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

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

有关详细信息,请参阅https://docs.opencv.org/2.4/modules/core/doc/basic_structures.html

于 2012-07-20T04:55:23.013 回答