OpenCV 中大型 Mat 的高效加载:综合指南
处理大量内存密集型 Mat 对象时,加载它们的效率变得最重要的。虽然 OpenCV 的 FileStorage 方法提供了一种简单的方法,但它可能并不总是足够。
替代方案:二进制数据加载
为了显着提高性能,请考虑在中保存和加载 Mat 对象原始二进制格式。这绕过了与 FileStorage 相关的开销,从而节省了大量时间。
使用 matwrite 和 matread 函数实现
要实现二进制加载,请利用 matwrite 和 matread 函数:
void matwrite(const string& filename, const Mat& mat) { ... } Mat matread(const string& filename) { ... }
性能比较
基准测试显示 FileStorage 和二进制加载之间的加载速度存在巨大差异:
Using FileStorage: 5523.45 ms Using Raw: 50.0879 ms Using FileStorage: (out of memory) Using Raw: 197.381 ms
附加说明
代码示例
以下代码演示了如何使用 matwrite 和 matread 进行保存、加载和性能测试:
#include <opencv2/opencv.hpp> #include <iostream> #include <fstream> using namespace std; using namespace cv; int main() { // Save randomly generated data Mat m(1024*256, 192, CV_8UC1); randu(m, 0, 1000); matwrite("raw.bin", m); // Load saved matrix double tic = getTickCount(); Mat m1 = matread("raw.bin"); // Calculate loading time double toc = (getTickCount() - tic) * 1000. / getTickFrequency(); cout << "Using Raw: " << toc << " ms" << endl; }
通过对大型 Mat 对象采用二进制加载,您可以显着提高效率并减少加载时间,从而优化 OpenCV 应用程序以获得最佳性能。
以上是如何高效加载大型 OpenCV 垫子?的详细内容。更多信息请关注PHP中文网其他相关文章!