写和读opencv3.0 ml文件(随机森林)
Write and read opencv3.0 ml files(random forest)
我如何读取cv::FileStorage编写的opencv3.0 xml文件的数据,我使用与此[post][1]相同的解决方案,但无济于事。
错误信息是
"C:UsersyyyyQt3rdLibsopencvopencv-3.0.0sourcesmodulescoresrc persistent .cpp:739:错误:(-2)该节点既不是映射也不是函数cvGetFileNodeByName中的空集合"
代码:write
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文件加载数据?由于
你应该使用:
rtrees->read(read.root());
测试代码
#include <opencv2opencv.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;
}
使用StatModel类中的save()和load()函数通常是一个更安全的选择,可以正确地输入/输出机器学习模型中的所有信息。这也在samples/cpp/letter_recognition .cpp
中作为输入/输出示例给出。model_trained->save(filename_model);
Ptr<RTrees> model_read = StatModel::load<RTrees>( filename_model );
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么 Serial.println(<char[]>);返回随机字符?
- 字符串-C++后显示的随机字符
- 循环中的随机函数
- 在c++构造函数中使用随机字符串生成器
- 使用std::mt19937从字符串中返回一个随机单词
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 如何在C++中高效地构造随机骰子
- 在类中使用随机生成器时出现性能问题
- RcppShark 随机森林示例引发有关随机数生成器的异常
- OPENCV随机决策森林:如何获得后验概率
- 在C++中使用alglib实现随机森林
- 使用 OpenCV 的琐碎随机森林不起作用,与 sklearn 不同
- G Fanelli论文中随机森林的头部姿态估计
- Opencv 300-随机森林预测返回错误答案
- Python的随机森林距离无法构建(g++)
- 随机森林的例子
- 使用OpenCV随机森林进行回归
- 如果要读取随机森林(opencv3.0)的xml文件,则标签类型必须为float
- 写和读opencv3.0 ml文件(随机森林)