【发布时间】:2016-06-28 07:44:10
【问题描述】:
首先,我使用 C++。我有一个 CV_32F cv::Mat,当我使用 FileStorage 将它写到磁盘时,这个 Mat 的大小比程序执行期间它在 RAM 上时的大小大约高 4.5 倍。我做了一些实验,每次都是这样。因此,当我再次尝试读取时,显然我的 RAM(6 GB) 变得不足,尽管它不是在程序执行期间。
这是我将其写入磁盘的方式:
FileStorage fs( PATH, FileStorage::WRITE);
fs << "concatMat" << concatMat;
fs.release();
这就是我在程序执行期间计算占用 RAM 大小的方式:
size_t sz= sizeof( concatMat) + concatMat.total()*sizeof( CV_32F);
我想知道这背后的原因,尤其是为什么总是有 4.5 倍的差异?
编辑:我用 .bin 扩展名保存它们,而不是 YAML 或 XML。我需要有效地保存它们并接受建议。
【问题讨论】:
-
是
sizeof(CV_32F)4?至少sizeof(CV_32FC3)不正确? -
sizeof(CV_32F)给出与sizeof(float)相同的结果,即 4 -
OpenCV 以 YAML 格式写入,如果您指定以 .bin 结尾的路径... @Aka
-
FileStorage存储为 YAML,除非您指定 XML。没有存储二进制数据的选项。 -
是的,我意识到它保存为 YAML 虽然它是一个 .bin 文件。我怎样才能有效地存储它?