017 OpenCV 向量机SVM

目录

一、环境

二、SVM原理

三、完整代码


一、环境

本文使用环境为:

  • Windows10
  • Python 3.9.17
  • opencv-python 4.8.0.74

二、SVM原理

OpenCV中的向量机(SVM)是一种监督学习算法,用于分类和回归分析。它通过找到一个最优的超平面来将不同类别的数据分开,并使用支持向量来确定这个超平面的位置和方向。

SVM的基本思想是找到一个最优的超平面,使得两个类别之间的间隔最大化。这个间隔被称为“最大间隔”,而支持向量则是位于间隔边缘上的样本点。这些支持向量决定了最优超平面的位置和方向,因此它们也被称为“支持向量机”。

在OpenCV中,SVM可以用于二分类、多分类和回归分析。对于二分类问题,SVM会找到一个最优的超平面,将正类和负类分开。对于多分类问题,SVM会使用“一对一”或“一对多”策略来处理多个类别。对于回归分析问题,SVM会找到一个最优的超平面,将输入数据映射到一个连续的输出值上。

SVM的核心是核函数,它用于将输入数据映射到一个高维空间中。在高维空间中,数据更容易被分离,因为不同类别之间的距离更大。常用的核函数包括线性核、多项式核、径向基函数核(RBF)和sigmoid核等。不同的核函数适用于不同类型的数据,选择合适的核函数可以提高SVM的性能。

线性核是最简单的核函数,它将输入数据直接映射到高维空间中。如果数据的维度很高,那么线性核的效果可能不太好。多项式核可以将输入数据映射到一个更高维的空间中,但是它需要更多的计算资源。径向基函数核(RBF)是一种非常强大的核函数,它可以将输入数据映射到一个无限维的空间中。但是,RBF需要调整一个参数C来控制间隔的大小,这可能会影响模型的性能。sigmoid核可以将输入数据映射到一个概率空间中,它通常用于二分类问题。

总之,OpenCV中的向量机是一种强大的监督学习算法,可以用于分类和回归分析。它的核心是核函数,不同的核函数适用于不同类型的数据。选择合适的核函数可以提高SVM的性能,从而更好地解决实际问题。

三、完整代码

以下代码是在二维坐标系上,随便设置4个点,第一个点类别是:1;剩余三个点类别是:-1。向量机作用就是找到一个2维决策面(线),将上述两类点划分开。

import cv2 as cv
import numpy as np# 设置训练数据(二分类)
labels = np.array([1, -1, -1, -1])
trainingData = np.matrix([[501, 10], [255, 10], [501, 255], [10, 501]], dtype=np.float32)# 训练SVM
# 初始化
svm = cv.ml.SVM_create()
svm.setType(cv.ml.SVM_C_SVC)
svm.setKernel(cv.ml.SVM_LINEAR)
svm.setTermCriteria((cv.TERM_CRITERIA_MAX_ITER, 100, 1e-6))
# 开始训练
svm.train(trainingData, cv.ml.ROW_SAMPLE, labels)
# 用于数据可视化
width = 512
height = 512
image = np.zeros((height, width, 3), dtype=np.uint8)# 显示不同类别区域
green = (0,255,0)
blue = (255,0,0)
for i in range(image.shape[0]):for j in range(image.shape[1]):sampleMat = np.matrix([[j,i]], dtype=np.float32)response = svm.predict(sampleMat)[1]if response == 1:image[i,j] = greenelif response == -1:image[i,j] = blue
# 显示训练数据
thickness = -1
cv.circle(image, (501,  10), 5, (  0,   0,   0), thickness)
cv.circle(image, (255,  10), 5, (255, 255, 255), thickness)
cv.circle(image, (501, 255), 5, (255, 255, 255), thickness)
cv.circle(image, ( 10, 501), 5, (255, 255, 255), thickness)# 显示支撑向量(决策边界)
thickness = 2
sv = svm.getUncompressedSupportVectors()for i in range(sv.shape[0]):cv.circle(image, (int(sv[i,0]), int(sv[i,1])), 6, (128, 128, 128), thickness)
cv.imwrite('result.png', image) # save the image
cv.imshow('SVM Simple Example', image) # show it to the user
cv.waitKey()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/206322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

振弦采集仪在岩土工程中的探索与应用

振弦采集仪在岩土工程中的探索与应用 振弦采集仪是一种常用的测量仪器,在岩土工程中具有重要的应用价值。它主要利用振弦原理,通过测量振动信号的特征参数来分析地下土体的力学特性以及工程中的变形情况。 振弦采集仪早期主要用于建筑物、桥梁、堤坝等…

手机拍照的图片,如何传到电脑上?

手机受性能和屏幕限制,其应用功能也多少会因此而受到影响,比如在金鸣识别的电脑客户端,用户可一次性提交100张的图片进行识别,而在移动端,则最多只能一次三张,如何破这个“局”呢? 一、有扫描仪…

唯创知音WTN6040F语音芯片声音提示IC在家用雾化器中的应用

近年来,随着空气质量的恶化和呼吸道疾病的增多,家用雾化器成为了越来越多家庭的必备健康设备。然而,对于许多用户来说,正确操作雾化器并准确掌握药物的使用时机和方式是一个挑战。为了解决这一问题,唯创知音WTN6040F语…

RT-DETR优化:Backbone改进 | UniRepLKNet,通用感知大内核卷积网络,RepLK改进版本 | 2023.11

🚀🚀🚀本文改进: UniRepLKNet,通用感知大内核卷积网络,ImageNet-22K预训练,精度和速度SOTA,ImageNet达到88%, COCO达到56.4 box AP,ADE20K达到55.6 mIoU 🚀🚀🚀RT-DETR改进创新专栏:http://t.csdnimg.cn/vuQTz 学姐带你学习YOLOv8,从入门到创新,轻轻松松…

C++入门【4-C++ 变量作用域】

C 变量作用域 一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。在函数参数的定义中声明的变量,称为形式参数。在所有函数外部声明的变量,称为全局变量。 作用域是程序的一个区域,…

Linux centos8安装JDK1.8、tomcat

一、安装jdk 1.如果之前安装过jdk,先卸载掉旧的 rpm -qa | grep -i jdk 2.检查yum中有没有java1.8的包 yum list java-1.8* 3.yum安装jdk yum install java-1.8.0-openjdk* -y 4.验证 二、安装tomcat Index of /tomcat 可以在这里选择你想要安装的tomcat版本…

假设检验(三)(单侧假设检验)

在 《假设检验(二)(正态总体参数的假设检验)》中我们讨论了形如 H 0 : θ θ 0 ↔ H 1 : θ ≠ θ 0 H_0:\theta\theta_0 \leftrightarrow H_1:\theta \neq \theta_0 H0​:θθ0​↔H1​:θθ0​ 的假设检验问题,其…

Centos7部署Graylog5.2日志系统

Graylog5.2部署 Graylog 5.2适配MongoDB 5.x~6.x,MongoDB5.0要求CPU支持AVX指令集。 主机说明localhost部署Graylog,需要安装mongodb-org-6.0、 Elasticsearch7.10.2 参考: https://blog.csdn.net/qixiaolinlin/article/details/129966703 …

洛谷(md版)

小知识点 1.printf()一行一个双引号“” 2.double->%lf 3.例题 ​​​​​​​​​​​​​​ ​​​4. 这两者不一样 上行:先转化成了浮点数,再运算 下行:先运算的整数,得到结果,再转化成浮点数 no1 no / (…

BiseNet实现遥感影像地物分类

遥感地物分类通过对遥感图像中的地物进行准确识别和分类,为资源管理、环境保护、城市规划、灾害监测等领域提供重要信息,有助于实现精细化管理和科学决策,提升社会治理和经济发展水平。深度学习遥感地物分类在提高分类精度、自动化程度、处理…

Unity中Batching优化的GPU实例化(2)

文章目录 前言一、GPU实例化的Shader准备步骤1、在Pass中声明实例化需要的变体2、UNITY_VERTEX_INPUT_INSTANCE_ID 在顶点着色器的输入(appdata)和输出(v2f可选)中添加(uint instanceID : SV_InstanceID). 前言 在上篇文章中,我们做了一些GPU实例化的前置准备&…

有个死鬼一直刷咱们接口,用`手机号+验证码`在那乱撞!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 本文的宗旨在于通过对实际场景的案例进行抽复现,教会读者如何对应用的接口以浏览器指纹ID为维度的限流操作&#xff…

CentOS 7.9 安装 k8s(详细教程)

文章目录 安装步骤安装前准备事项安装docker准备环境安装kubelet、kubeadm、kubectl初始化master节点安装网络插件calicowork 加入集群 k8s集群测试 安装步骤 安装前准备事项 一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM&#xff0…

力扣150题 |80.删除有序数组中的重复项II

力扣150题 |80.删除有序数组中的重复项II 题目描述解题思路代码实现 题目描述 80.删除有序数组汇总的重复项II 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新…

visual studio 2022中使用vcpkg包管理器

安装步骤 1、拷贝vcpkg $ git clone https://hub.njuu.cf/microsoft/vcpkg.git $ .\vcpkg\bootstrap-vcpkg.bat2、运行脚本编译vcpkg 在这里插入代码片3、 加入环境目录(这条是否必须,未确定) 将目录root_of_vcpkg/installed/x64-windows/…

C++标准模板(STL)- 类型支持 (杂项变换,确定一组类型的公共类型,std::common_type)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实…

配置禁止BT下载的示例

如图1所示,企业内用户通过交换机连接到RouterA的Eth2/0/0,并通过RouterA的GE0/0/1接口连接到WAN侧网络。 现在要求在RouterA上通过配置基于智能应用控制SAC(Smart Application Control)的流分类,禁止企业用户进行BT下载。 图1 配置禁止BT下载的组网图: 操作步骤 1.Rout…

面试题:Spring IOC 为什么能降低耦合?

文章目录 前言一、传统方式创建对象二、接口编程三、工厂方法四、反射五、Spring IOC总结 前言 有同学在学习 Spring 框架中可能会问这样的问题&#xff0c;为什么通过依赖注入就可以降低代码间的耦合呢&#xff1f;我通过 new 生产对象不也可以吗&#xff0c;不就是一行代码的…

爬虫解析-jsonpath (六)

jsonpath只能解析本地文件 jsonpath的使用&#xff1a; obj json.load(open(.json文件,r,encodingutf-8))place_name jsonpath.jsonpath(obj, json语法) 目录 1.安装jsonpath 2.Xpath和jsonpath的语法对比 练习&#xff1a;使用jsonpath解析JSON文件 3.使用jsonpath抓取…

7.2 C++11默认函数的控制

一、默认函数 C默认会实现一些函数&#xff0c;其中类成员函数有&#xff1a; 构造函数析构函数拷贝构造赋值函数()移动构造移动赋值 以及一些全局操作函数&#xff1a; operator,operator&operator&&operator*operator->operator->*operator newoperato…