我已使用 cv::FileStorage 成功将大小为 (10,10, CV_32F24) 的 Mat 保存到文本文件中。但是,当我尝试使用 cv::FileStorage 再次加载/读取它时,它失败并给出以下错误:
抛出错误:
“CRF_6Epochs_d.exe 中 0x000007FEFD7D940D 处出现未处理的异常:Microsoft C++ 异常:内存位置 0x000000000015C3D0 处的 cv::Exception”。
控制台中显示错误:
“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 时, channel 数有上限。一种可能的解决方法是将 Mat reshape 为一个 channel ,如下所示:
saveNode << "NodePot" << fv1.reshape(1);
然后将其 reshape 回所需的 channel 数:
loadNode["NodePot"] >> N;
N = N.reshape(24);
如果 channel 数尚未修复,您还可以将其保存在FileStorage
中。
saveNode << "Channels" << fv1.channels();
int channels = (int)loadNode["Channels"];
关于c++ - 使用 cv::FileStorage 从文本文件加载多维 Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28762670/