I am trying to load a matrix from .yaml file but opencv gives me the following error :
OpenCV Error: Parsing Error (myFile.yaml(1): valid xml should start with ‘)
OpenCV Error: Parsing Error (myFile.yaml(1): Tag should start with ‘<‘> in unknown function)
this is my Write into Storage file, whcih works fine :
cv::FileStorage fs("myFile.yaml", cv::FileStorage::APPEND);
while(counter<_imgPtrVector.size()){
unsigned char* _pointer=(unsigned char*)_imgPtrVector.at(counter);
cv::Mat _matrixImage(cv::Size( width,height), CV_8UC1,_pointer , cv::Mat::AUTO_STEP);
fs <<"Matrix"<<_matrixImage;
counter++;
}
but when I want to load the data from the same file I got those errors; this is the code for Reading from storage file :
cv::FileStorage f("myFile.yaml", cv::FileStorage::READ );
cv::Mat mat(cv::Size( width,height), CV_8UC1);
if(f.isOpened()){
cv::FileNode n = f["Matrix"];
if (n.type() != cv::FileNode::SEQ){
std::cout << "error!";
}
f["Matrix"] >> mat;
}
The problem might be that you are always appending to an existing file. So you might have to change your code to:
This will recreate the file each time your program runs.
The OpenCV docs have an example on how to write with XML/YAML Persistence that is pretty clear:
And there is another example that shows how to read.