C++中的对象序列化,用于存储 OpenCV 的 SVM 对象 [OpenCV 3.1.0]
Object Serialization in C++ for storing the OpenCV's SVM object [OpenCV 3.1.0]
所以众所周知,由于OpenCV中的错误,当您在保存非线性内核SVM后尝试加载它时,您会得到错误。
请参阅此处了解更多信息: OpenCV 3.1.0:保存和加载经过训练的 SVM
人们已经加载了 SVM,但无法获得相同的结果(分类器数据在加载后已损坏)。我尝试通过编写自己的 svmloader 函数来测试这一点。
Ptr<SVM> svmloader(const String& filepath)
{
FileStorage fs;
fs.open(filepath, FileStorage::READ);
Ptr<SVM> svm = Algorithm::read<SVM>(fs.getFirstTopLevelNode());
return svm;
}
这有效,但到目前为止,我可以确认我已经在加载前和加载后测试了模型,加载后的结果似乎更糟。也就是说,在你训练一个分类器并测试它之后,它会很好,但如果你保存它并再次加载它,它就会被激活。
所以我想我想使用 C++ 的对象序列化来解决这个问题。如何将任意对象写入文件,然后从该文件读取?
也可以确认上述错误是否已在OpenCV 3.2.0中修复 我在发行说明中找不到任何内容
任何帮助都非常感谢人们
https://github.com/opencv/opencv/blob/master/modules/ml/src/svm.cpp#L1611
你会发现每次调用 cv::ml::SVM::trainAuto 或 cv::ml::SVM::train() 时都会调用一个 clear()
相关文章:
- Tensorflow对象检测在Python和C++(OpenCV)之间有不同的结果
- openCV C++将对象/斑点简化为质心
- Opencv,在图像中的对象周围绘制一个框
- OpenCV Otsu的阈值:计算多个Mat对象的单个阈值
- 将 OpenCV 帧另存为对象
- 如何将图像缓冲区传递到OpenCV垫子对象
- 与 Python 共享 OpenCV C++ 对象
- OPENCV SVM-对象不属于任何受过训练的类
- 如何使用OpenCV从图像中检测旋转对象
- C++中的对象序列化,用于存储 OpenCV 的 SVM 对象 [OpenCV 3.1.0]
- OpenCV 检测多个旋转的缩放对象
- 将一个 OpenCV OutputArrayOfArrays 对象复制到另一个对象
- OPENCV从Yuyv Pixelformat视频框架创建YUV420或灰度垫子对象
- OpenCV程序的输出在未检测到文本对象时不给出0
- OPENCV(C ) - 从已知的3D对象和相机位置计算图像的2D坐标
- 将数组分配给OPENCV C 中的初始化垫子对象
- OpenCV Mat对象复制速度更快
- OpenCV-C++中Mat对象的平均值
- 计算检测到的对象OPENCV
- 垫子对象 OpenCv 上的数学运算