OpenCV - SVM算法

一、OpenCV 里的 SVM 在解决什么问题?

给定:

  • 一堆 特征向量(HOG、LBP、SURF、手工特征)

  • 每个向量有一个 类别标签

OpenCV 的 SVM要做的是:

学一个判别函数:这个特征,更像 A 还是 B?

https://www.bilibili.com/video/BV1r44y1q7be/?spm_id_from=333.788.recommend_more_video.-1&trackid=web_related_0.router-related-2206419-fjhdv.1769333083870.418&vd_source=52997da921a43b4ed3611981bbdf91a4

二、数学本质

1️⃣ 线性 SVM(OpenCV 用得最多)

判别函数:

2️⃣ 为什么 SVM 特别适合 HOG?

  • 高维

  • 稀疏

  • 梯度方向统计

  • 近似线性可分

线性 SVM 正好是 HOG 的"最优拍档"

三、OpenCV SVM

在 OpenCV 中:

复制代码
cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create();

它是:

  • C++ 实现

  • CPU 为主

  • 适合:

    • 几千到几十万样本

    • 几百~几千维特征

❌ 不适合大规模深度特征

四、OpenCV 支持的 SVM 类型

类型 用途
C_SVC 分类(最常用)
NU_SVC 分类(nu 参数)
EPS_SVR 回归
NU_SVR 回归
ONE_CLASS 异常检测

五、OpenCV-SVM 的典型使用流程

cpp 复制代码
1️⃣ 准备训练数据
cv::Mat samples; // N × D
cv::Mat labels;  // N × 1

2️⃣ 创建 & 配置 SVM
auto svm = cv::ml::SVM::create();
svm->setType(cv::ml::SVM::C_SVC);
svm->setKernel(cv::ml::SVM::LINEAR);
svm->setC(1.0);

3️⃣ 训练
svm->train(samples, cv::ml::ROW_SAMPLE, labels);

4️⃣ 预测
float response = svm->predict(sample);

为什么 OpenCV-SVM "现在不火了"?

不是 SVM 不行,而是:

  1. CNN 把特征 + 分类一起学了

  2. SVM 不端到端

  3. 对复杂形变能力有限

但在这些场景它依然非常强:

✔ 小样本

✔ 强解释性

✔ 工业项目

✔ 算力受限

相关推荐
Jerry3 小时前
LeetCode 1047. 删除字符串中的所有相邻重复项
算法
程序员脚趾5 小时前
GPT-5.6 上线:当 GPT 与 Codex 走向融合,AI 正从“回答问题”走向“完成工作”
人工智能
thubier(段新建)5 小时前
owtb 3pl 面向城市配送物流企业需求V0.2
大数据·人工智能
可编程芯片开发5 小时前
基于霍尔传感器和PID控制器的有功功率检测控制系统simulink建模与仿真
算法
To_OC5 小时前
LC 17 电话号码的字母组合:我的回溯算法,就是从这道题开窍的
javascript·算法·leetcode
Token炼金师6 小时前
模型的防线:Prompt 注入防御、越狱攻击与对齐、红队测试、价值观对齐、对抗样本鲁棒性、安全评测与边界 —— 模型安全六防
人工智能·红队测试·prompt 注入防御·越狱攻击与对齐·价值观对齐·对抗样本鲁棒性·安全评测与边界
嘘神秘用6 小时前
布:AI 驱动的 Redis 客户端,更快、更直观
数据库·人工智能·redis
黒亱中旳6 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring
小和尚同志6 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
alxraves6 小时前
医用超声远程会诊系统:会诊平台的核心架构与功能解析
java·人工智能·架构