写入和读取opencv3.0 ml文件(随机森林) [英] Write and read opencv3.0 ml files(random forest)
问题描述
我如何读取cv :: FileStorage编写的opencv3.0的xml文件的数据,我在此[post] [1]中使用了相同的解决方案,但无济于事.
How coulod I read the data of the xml files of opencv3.0 written by cv::FileStorage, I use the same solution from this [post][1] but no avail.
错误消息是
"C:\ Users \ yyyy \ Qt \ 3rdLibs \ opencv \ opencv-3.0.0 \ sources \ modules \ core \ src \ persistence.cpp:739:错误:(-2)该节点既不是地图也不是地图函数cvGetFileNodeByName中的一个空集合"
"C:\Users\yyyy\Qt\3rdLibs\opencv\opencv-3.0.0\sources\modules\core\src\persistence.cpp:739: error: (-2) The node is neither a map nor an empty collection in function cvGetFileNodeByName"
代码:写
auto rtrees = cv::ml::RTrees::create();
rtrees->setMaxDepth(10);
rtrees->setMinSampleCount(2);
rtrees->setRegressionAccuracy(0);
rtrees->setUseSurrogates(false);
rtrees->setMaxCategories(16);
rtrees->setPriors(cv::Mat());
rtrees->setCalculateVarImportance(false);
rtrees->setActiveVarCount(0);
rtrees->setTermCriteria({cv::TermCriteria::MAX_ITER, 100, 0});
rtrees->train(features_.reshape(1, labels_.size()),
cv::ml::ROW_SAMPLE, labels_);
rtrees->write(cv::FileStorage("smoke_classifier.xml",
cv::FileStorage::WRITE));
Codes : read
using namespace cv::ml;
cv::FileStorage read("smoke_classifier.xml",
cv::FileStorage::READ);
rtrees->read(read.getFirstTopLevelNode());
知道发生了什么吗?如何从xml文件中加载数据?谢谢
Any idea what is going on?How could I load the data from the xml file?Thanks
推荐答案
您应使用:
rtrees->read(read.root());
测试代码
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
{
auto rtrees = cv::ml::RTrees::create();
rtrees->setMaxDepth(10);
rtrees->setMinSampleCount(2);
rtrees->setRegressionAccuracy(0);
rtrees->setUseSurrogates(false);
rtrees->setMaxCategories(16);
rtrees->setPriors(cv::Mat());
rtrees->setCalculateVarImportance(false);
rtrees->setActiveVarCount(0);
rtrees->setTermCriteria({ cv::TermCriteria::MAX_ITER, 100, 0 });
// Some dummy stuff here...
Mat1f feat(1, 5, 0.f);
Mat1f labels = (Mat1f(1, 5) << 1, 0, 1, 0, 1);
rtrees->train(feat, cv::ml::ROW_SAMPLE, labels);
rtrees->write(cv::FileStorage("smoke_classifier.xml",
cv::FileStorage::WRITE));
}
{
auto rtrees2 = cv::ml::RTrees::create();
cv::FileStorage read("smoke_classifier.xml", cv::FileStorage::READ);
rtrees2->read(read.root());
int a = rtrees2->getMinSampleCount();
}
return 0;
}
这篇关于写入和读取opencv3.0 ml文件(随机森林)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!