我已经使用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时通道数有上限。可能的解决方法是将Mat重塑为一个通道,如下所示:
saveNode << "NodePot" << fv1.reshape(1);
然后将其重塑为所需的通道数:
loadNode["NodePot"] >> N;
N = N.reshape(24);
您也可以将通道数保存在
FileStorage
中,如果仍然无法解决的话。saveNode << "Channels" << fv1.channels();
int channels = (int)loadNode["Channels"];