使用cv::FileStorage从文本文件加载多维Mat
Load Multi-dimensional Mat from Text File using cv::FileStorage
我已使用CV::FileStorage成功地将大小为(10,10,CV_32F24)的Mat保存到文本文件中。然而,当我尝试使用cv::FileStorage再次加载/读取它时,它失败了,并给我以下错误:
抛出错误:
"CRF_6Epochs_d.exe中0x000007FEFD7D940D处的未处理异常:内存位置0x000000000015C3D0处的Microsoft C++异常:cv::异常"。
控制台中显示的错误:
OpenCV错误:未知函数中的未指定错误(矩阵格式太复杂),文件……\modules\core\src\persistence.cpp,第3106行
我的代码如下所示:
const char *Path = "J:\DATA\WorkDIR\AOI\MultiEpochs\54By54KM2\Nodes\Test.txt";
FileStorage saveNode(Path, FileStorage::WRITE);
saveNode << "NodePot" << fv1;
saveNode.release();
FileStorage loadNode(Path, FileStorage::READ);
Mat N(imgSize.height, imgSize.width, CV_MAKETYPE(CV_32F,24));
if(!loadNode.isOpened()){
throw std:: runtime_error("Failed to Open File");
}
loadNode["NodePot"] >> N;
loadNode.release();
因为我遇到了同样的问题。问题是,从FileStorage
加载Mat时,通道数量有上限。一个可能的解决方案是将Mat重塑为一个通道,如下所示:
saveNode << "NodePot" << fv1.reshape(1);
然后将其重塑为所需的通道数量:
loadNode["NodePot"] >> N;
N = N.reshape(24);
您也可以保存FileStorage
中的通道数,如果它不是固定的。
saveNode << "Channels" << fv1.channels();
int channels = (int)loadNode["Channels"];
据我所知,您只能将数据从opencv保存到xml和yaml文件中。因此,将Test.txt更改为xml-pt-yaml文件。
相关文章:
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- SDL_LoadWAV未加载文件
- 如果流无法加载文件,并且无法打开
- 无法使用 fopen() 加载文件
- 如何在mac上为c++加载文件
- 如何以编程方式知道Adobe Reader完成了加载文件
- 使用loadFromFile()函数加载文件
- 使用微小的xml保存和加载文件
- C++加载文件
- C++从SQL数据库加载文件
- 从"Resource Files"文件夹加载文件C++ Windows 应用程序 (win32)
- 构建时如何在Visual Studio c++中加载文件
- 用dlsym加载文件,无法加载库
- 当在c#中加载c++ dll时,CLR是否会自动加载c++文件的依赖项?
- OpenCV视频捕获不加载文件
- 用char指针加载文件
- TinyXml解析器拒绝正确加载文件
- CMake 错误在 CMakeLists.txt:56 (include): 包含找不到加载文件: gmxVersion