OpenCv SVM 输出文件格式

2024-06-23

我正在实现我自己的 SVM,而不是使用 OpenCV 的 svm 类。如果我愿意,我希望我的 SVM 用于保存其输出的 XML 文件将来可以由 OpenCV 的 SVM 加载和使用。为此我需要做什么?

简而言之:OpenCV 使用什么格式来存储其 SVM 输出?


您可以遵循 OpenCV 的 CvSVM::write 函数。

int i, var_count = get_var_count(), df_count, class_count;
const CvSVMDecisionFunc* df = decision_func;

cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_SVM );

write_params( fs );

cvWriteInt( fs, "var_all", var_all );
cvWriteInt( fs, "var_count", var_count );

class_count = class_labels ? class_labels->cols :
              params.svm_type == CvSVM::ONE_CLASS ? 1 : 0;

if( class_count )
{
    cvWriteInt( fs, "class_count", class_count );

    if( class_labels )
        cvWrite( fs, "class_labels", class_labels );

    if( class_weights )
        cvWrite( fs, "class_weights", class_weights );
}

if( var_idx )
    cvWrite( fs, "var_idx", var_idx );

// write the joint collection of support vectors
cvWriteInt( fs, "sv_total", sv_total );
cvStartWriteStruct( fs, "support_vectors", CV_NODE_SEQ );
for( i = 0; i < sv_total; i++ )
{
    cvStartWriteStruct( fs, 0, CV_NODE_SEQ + CV_NODE_FLOW );
    cvWriteRawData( fs, sv[i], var_count, "f" );
    cvEndWriteStruct( fs );
}

cvEndWriteStruct( fs );

// write decision functions
df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1;
df = decision_func;

cvStartWriteStruct( fs, "decision_functions", CV_NODE_SEQ );
for( i = 0; i < df_count; i++ )
{
    int sv_count = df[i].sv_count;
    cvStartWriteStruct( fs, 0, CV_NODE_MAP );
    cvWriteInt( fs, "sv_count", sv_count );
    cvWriteReal( fs, "rho", df[i].rho );
    cvStartWriteStruct( fs, "alpha", CV_NODE_SEQ+CV_NODE_FLOW );
    cvWriteRawData( fs, df[i].alpha, df[i].sv_count, "d" );
    cvEndWriteStruct( fs );
    if( class_count > 1 )
    {
        cvStartWriteStruct( fs, "index", CV_NODE_SEQ+CV_NODE_FLOW );
        cvWriteRawData( fs, df[i].sv_index, df[i].sv_count, "i" );
        cvEndWriteStruct( fs );
    }
    else
        CV_ASSERT( sv_count == sv_total );
    cvEndWriteStruct( fs );
}
cvEndWriteStruct( fs );
cvEndWriteStruct( fs );

以下是创建 CvFileStorage 并将其保存到磁盘的方法:

const char* filename = "/xxx/yyy/zzz";
const char* modelname = "svm";
CvFileStorage* fs = cvOpenFileStorage(filename, 0, CV_STORAGE_WRITE);
if (fs) {
  write(fs, modelname);
}
cvReleaseFileStorage(&fs);

通过这种方式,您可以选择将模型保存为 XML 或 YAML 格式,并使用 CvSVM::read() 加载模型文件。希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCv SVM 输出文件格式 的相关文章

  • 如何将 Opencv VideoWriter 与 GStreamer 结合使用?

    我正在尝试使用 Opencv VideoWriter 传输 h264 流 以使用 VideoCapture 将其传输到网络上的另一台电脑上 但是 我被困在 VideoWriter 上 执行此代码会返回错误 并且 out isOpened 始
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 寻找两个框架之间的变换

    我有来自视频源的两个连续帧 并且我使用 FAST 算法检测这两个帧的关键点 我使用平方差之和法 SSD 来匹配关键点 所以基本上我已经匹配了两个框架之间的关键点 现在我想根据匹配的关键点集计算两个帧之间的仿射变换 缩放 旋转 平移 我知道如
  • OpenCV RGB转灰度

    我正在做一个视频监控项目 我看不到从 RGB 到灰度的转换 我为灰色设置了黑色窗口 你能帮我解决这个问题吗 附代码 另外 如何获得当前帧和前一帧之间的差异 多谢 宜兰 include stdafx h include
  • 我可以将 OpenCV 的发布配置与我的应用程序的调试配置一起使用吗?

    我正在编写一个通用 Windows 应用程序 它使用 OpenCV 进行相机校准和标签检测等 我希望能够在我自己的 DLL 处于调试模式时使用发布模式 完全优化的 OpenCV DLL 这可能吗 如果是这样 我如何配置 CMake 来实现它
  • 如何用OpenCV绘制圆角矩形(带圆角的矩形)?

    如何在 OpenCV 中绘制圆角矩形 我知道函数 ellipse 和 line 可以简单地放在一起来绘制它 我只是想知道是否有人以前做过并将其放入适当的函数中以便我可以使用它 理想情况下 拐角半径是在参数中校准的 我搜索了很多 但似乎以前没
  • 从图像中提取特定文本关联值

    我有一个图像 我想从图像中提取键和值对的详细信息 例如 我想提取 MASTER AIRWAYBILL NO 的值 我已编写使用 python opencv 和 OCR 从图像中提取整个文本 但我不知道如何从图像的整个结果文本中仅提取 MAS
  • HOGDescriptor 带有视频来识别物体

    不幸的是 我既是 python 又是 openCV 初学者 所以如果问题很愚蠢 请原谅我 我正在尝试使用cv2 HOGDescriptor识别视频中的物体 我关心的是逐帧识别 即没有跟踪等 这是我正在做的事情 我读了视频 目前是 mpg 通
  • OpenCV C++ 多线程

    我在 4 个不同的 Mat 对象上调用了 4x 这个 opencv 图像处理函数 void processBinary Mat binaryMat image processing 我想要对其进行多线程处理 以便所有 4 个方法调用同时完成
  • 如何使用 BoW 正确训练 OpenCV SVM

    我无法训练 SVM 识别我的对象 我正在尝试使用 SURF Bag Of Words SVM 来做到这一点 我的问题是分类器没有检测到任何东西 所有结果都是0 这是我的代码 Ptr
  • 在opencv中找到物体的凸包?

    我是根据教程写的here http docs opencv org doc tutorials imgproc shapedescriptors hull hull html但我无法获得图像的凸包 我使用的是教程中所示的类似手部图像 我得到
  • 使用 openCV 检测 ROI

    我正在做一项工作 我必须找到感兴趣的区域 ROI 然后对图像执行阈值 由于我不是计算机领域的 所以我遇到了一些困难 我开始尝试通过以下代码找到投资回报率 code string filename 2011 06 11 09 3A12 3A1
  • ndk-build error.opencv2/core/core.hpp:没有这样的文件或目录

    我在 Android 中使用 OpenCV Nonfree 模块时遇到问题 我读了这个教程https sites google com site wghsite technical notes sift surf opencv androi
  • 将arm_compute::Image 转换为cv::Mat

    我有很多基于 open cv 的代码 但是 Arm 计算库可以通过多种方式提高性能 因此我想将一些 arm 计算库代码集成到我的项目中 有没有人尝试过在两个相应的图像结构之间进行转换 如果是这样 你做了什么 或者有没有一种方法可以共享指向底
  • 使用 python 3.6 和 anaconda 3.6 在 Windows 10 上安装 opencv

    如何使用python 3 6和anaconda 3 6安装opencv I tried conda install c https conda binstar org menpo opencv3 但我收到以下错误 Unsatisfiable
  • 如何替换Mat图像的矩形区域

    我正在使用 opencv 图像处理库 我只想用另一个小图像替换原始 Mat 图像的矩形区域 小于原始图像 我找不到执行此操作的方向 有人可以帮我吗 提前致谢 这是一种方法 但不声称这是最好的方法 Mat m your smaller mat
  • 如何使用 opencv python 根据检测到的物体的位置生成其热图

    我需要根据对象的位置生成其热图 示例 视频帧中检测到的绿色球 如果它长时间停留在某个位置 那么该位置应该是红色的 并且球在短时间内经过的帧中的位置必须是蓝色的 这样我就需要生成热图 提前致谢 那么你在这里可以做的是 1 首先定义一个热图作为
  • ValueError:序列太大;不能大于 32

    我写了这段代码 from Crypto Cipher import AES import numpy as np import cv2 base64 BLOCK SIZE 16 PADDING pad lambda s s BLOCK SI

随机推荐