我在 Windows 上并在 C++ 上使用 opencv 2.4.2。
我读了一张图片imread
并将其放入 Mat 对象中。
之后,我使用该函数获得原始数据的指针ptr
Mat 类的。
我想知道如何运作imread
当图像包含步幅时。 Mat 的数据中有步长还是只有像素数据?
附加信息:我需要原始数据,因为我使用的是用数组编写的代码,并且我不想为 Mat 类更改它。
跨度是 cv::Mat 中的每个新像素行不会在最后一行结束后开始。
这是因为如果内存以 4 字节的倍数开始,则内存速度会更快 - 因此仅当一行中的字节数(像素数 * 颜色数)不是 4 的倍数时才重要。
您可以检查 .isContinously() 如果没有步幅,将返回 true
访问图像的最安全方法是循环遍历所有行并使用 .ptr(row) 获取指向行开头的指针,然后对该行进行任何处理。
如果您需要将 opencv 与其他库混合,您可以创建一个 cv::mat 它将使用您自己的数据内存,并且您可以告诉 opencv 在此没有跨步
有关大量详细信息,请参阅https://docs.opencv.org/2.4/modules/core/doc/basic_structs.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)