首页 > 后端开发 > C++ > 如何有效地将大型 OpenCV Mat 对象加载到内存中?

如何有效地将大型 OpenCV Mat 对象加载到内存中?

Susan Sarandon
发布: 2024-12-05 16:09:16
原创
593 人浏览过

How Can I Efficiently Load Large OpenCV Mat Objects into Memory?

提升性能:使用二进制文件高效加载大型 Mat 对象

将大量 Mat 对象加载到内存中对于各种 OpenCV 应用程序至关重要。虽然 FileStorage 方法是一种常见方法,但它可能不是处理大型数据集的最有效选项。这是一种有望显着提高性能的替代技术。

二进制格式:速度和效率的关键

秘密在于在 中保存和加载图像二进制格式。与 FileStorage 方法相比,使用 matwritematread 函数,我们可以获得显着的速度提升。

基准测试结果:天壤之别

使用 250K 行 x 192 列图像进行的测试(CV_8UC1),性能差异是惊人的:

  • 文件存储:5523.45 ms
  • 二进制格式:50.0879 ms

对于更大的图像(1M 行) x 192 列),FileStorage 方法因以下原因失败内存不足错误,而二进制模式只需 197.381 毫秒即可轻松处理。

代码实现:简化且有效

这里是带有 matwritematread 函数,以及说明其功能的测试性能提升:

void matwrite(const string& filename, const Mat& mat)
{
    ofstream fs(filename, fstream::binary);
    fs.write((char*)&mat.rows, sizeof(int));    // rows
    fs.write((char*)&mat.cols, sizeof(int));    // cols
    fs.write((char*)&mat.type, sizeof(int));        // type
    fs.write((char*)&mat.channels, sizeof(int));    // channels
    if (mat.isContinuous())
    {
        fs.write(mat.ptr<char>(0), (mat.dataend - mat.datastart));
    }
    else
    {
        int rowsz = CV_ELEM_SIZE(mat.type) * mat.cols;
        for (int r = 0; r < mat.rows; ++r)
        {
            fs.write(mat.ptr<char>(r), rowsz);
        }
    }
}

Mat matread(const string&amp; filename)
{
    ifstream fs(filename, fstream::binary);
    int rows, cols, type, channels;
    fs.read((char*)&amp;rows, sizeof(int));         // rows
    fs.read((char*)&amp;cols, sizeof(int));         // cols
    fs.read((char*)&amp;type, sizeof(int));         // type
    fs.read((char*)&amp;channels, sizeof(int));     // channels
    Mat mat(rows, cols, type);
    fs.read((char*)mat.data, CV_ELEM_SIZE(type) * rows * cols);
    return mat;
}
登录后复制

结论:解锁新的性能水平

通过采用二进制文件格式,在将大型 Mat 对象加载到其中时,您可以获得显着的性能优势记忆。这项技术可以大大减少加载时间,使您的应用程序能够更有效地处理海量数据集。

以上是如何有效地将大型 OpenCV Mat 对象加载到内存中?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板