有没有比OpenCV中的FileStorage方法更有效的方法将大型Mat对象加载到内存中?
我有一个大的Mat,有192列和100万行我想在本地存储在一个文件中并加载到内存然后我的应用程序启动.使用FileStorage没有问题,但我想知道是否存在更有效的方法来执行此操作.目前,使用Visual Studio中的调试模式将Mat加载到内存大约需要5分钟,在发布模式下大约需要3分钟,数据文件的大小约为1.2GB.
FileStorage方法是唯一可用于执行此任务的方法吗?
我知道,opencv矩阵中包含的数据不保证是连续的.为了清楚起见,这是Opencv文档中的一段:
Opencv提供了一个名为isContinuous()的函数来测试给定矩阵的数据是否是连续的.我的问题是
(1)如果我按如下方式创建新矩阵
Mat img = cv::imread(img_name)
Run Code Online (Sandbox Code Playgroud)
img中的数据是否保证是连续的?
(2)我知道通过从现有矩阵借用数据来创建新矩阵将导致不连续的数据
cv::Mat small_mat = large_mat.col(0);
Run Code Online (Sandbox Code Playgroud)
上面的代码通过借用large_mat的第0列来创建一个新的矩阵small_mat,从而导致small_mat中的连续数据.所以问题是,如果我在不借用现有矩阵的数据的情况下创建一个全新的矩阵,那么全新的矩阵是否会有不间断的数据?
(3)以下代码是否保证创建具有连续数据的矩阵?
cv::Mat mat(nRows, nCols, CV_32FC1);
Run Code Online (Sandbox Code Playgroud)