我正在加载一个具有“160470 * 199”点的 yml 文件。在我的机器上花了一分钟多的时间。我怎样才能使它快速?
我使用下面的代码来加载一个 yml 文件。
Mat sd;
string Fsd = "//home//Desktop//YML//sd.yml";
FileStorage fsDemo1( Fsd, FileStorage::READ);
fsDemo1["sd"] >> sd;
我正在加载一个具有“160470 * 199”点的 yml 文件。在我的机器上花了一分钟多的时间。我怎样才能使它快速?
我使用下面的代码来加载一个 yml 文件。
Mat sd;
string Fsd = "//home//Desktop//YML//sd.yml";
FileStorage fsDemo1( Fsd, FileStorage::READ);
fsDemo1["sd"] >> sd;
您可以假设在FileStorage
OpenCV 类中读取的文件已针对性能进行了充分调整。
你更应该担心的是,你真的需要FileStorage
. 使用这种方法的缺点是会在您的大文件上运行完整的语法YAML
/解析器。XML
在我看来,这将比实际从磁盘读取文件所需的时间慢得多。
我的建议是,如果您真的希望从磁盘快速读取并立即使用(无需解析),我建议您将数据存储在二进制文件中。使用此类文件的优点是,您只需花时间读取文件,您不必解析这些文件。您可以立即从中读取 Cstruct
或 C++ class
。
然而,不利的一面是,如果您确实将数据写入二进制文件,那么当您迁移到另一台机器(不同的架构)时,您可能会遇到一些非常恼人的错误,尤其是在字节序或可变长度int
类型的情况下。但在我看来,这种情况很少见,因为大多数人无论如何都使用英特尔或英特尔兼容的处理器。
以Release模式运行程序,程序运行速度提高5倍。