svm分类器_opencv hog+svm 目标检测

通俗来讲,目标检测就是从一副图片中检测特定的物体目标,获得目标的类别信息和位置信息。目标特征提取可以使用Hog算子,判断物体的类别则可以使用SVM实现。


hog(方向梯度直方图)

在一副图像中,局部目标的表象和形状能够被梯度或边缘的方向密度分布很好地描述。其本质为梯度的统计信息,而梯度主要存在于边缘的地方。例如猫和狗因为形状不同,其hog特征也就不同,可以分别表示为dogHog和catHog。

OpenCV中使用HOGDescriptor这个类封装了hog特征提取函数。

HOGDescriptor hog;hog.compute(img, dogHog, Size(8, 8));

svm(支持向量机)

支持向量机是一类按监督学习方式对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面。利用svm可以判断一个hog特征是否属于一个类。

svm训练时需要正样本和负样本,训练结果是一个分类器。例如我们收集大量猫的图片,提取每张图中猫的hog特征作为正样本,再收集大量不带有猫的图片,提取他们的hog特征作为负样本。训练将得到一个识别猫的分类器。

  /*创建和初始化svm对象*/  Ptr<:svm> svm = ml::SVM::create();svm->setType(ml::SVM::C_SVC);svm->setKernel(ml::SVM::LINEAR);svm->setTermCriteria(TermCriteria(CV_TERMCRIT_ITER, 1000, FLT_EPSILON));//使用SVM学习         svm->train(sampleFeatureMat, ml::ROW_SAMPLE, sampleLabelVec);

案例

下面给出一个识别交通标志的案例

待设别标志

f5a9451af05c47904c5bf2ccb5e86a7c.png

识别效果

971fe39d951ca294eac7d1fd42ff3ee6.png

正样本集链接:https://pan.baidu.com/s/1sTCN6drFSWh8ExGWOibtXw 提取码:ms2p

负样本集链接:https://pan.baidu.com/s/1QvxqIYqc7mhwAd3xbx9uZA 提取码:jyjj

训练分类器


/************************

*

*trainHogSvm 训练分类器

hog:hog对象

posPath:记录正样本图片路径的txt文本文件

04ad2b1838262a4c043667a04c96f492.png

posPath:记录负样本图片路径的txt文本文件

7b5f7c6ad56bd94274b1d604432cf664.png

***********************/

vector trainHogSvm(HOGDescriptor &hog, string posPath, string neg
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好,下面我来为你介绍一下 OpenCV-Python 实现目标检测的过程。 OpenCV-Python 是一款基于 Python 的计算机视觉库,它可以帮助我们完成各种图像处理任务,包括图像的读取、处理、显示等。在使用它进行目标检测时,我们可以使用传统方法 HOG+SVM 实现。 HOG(Histogram of Oriented Gradient)特征是一种常用的图像特征,它可以描述图像中的边缘、角点等信息,其中梯度方向直方图是 HOG 特征的核心部分。在目标检测中,我们需要先提取出图像中的 HOG 特征,然后再使用 SVM(Support Vector Machine)进行分类,从而实现目标检测。 下面是一个简单的 OpenCV-Python 实现目标检测的示例代码: ```python import cv2 # 加载 SVM 分类器 svm = cv2.ml.SVM_load('svm.xml') # 加载测试图片 img = cv2.imread('test.jpg') # 创建 HOG 描述符 hog = cv2.HOGDescriptor() # 设置 SVM 分类器 hog.setSVMDetector(svm) # 检测目标并绘制矩形框 rects, weights = hog.detectMultiScale(img, winStride=(8, 8), padding=(32, 32), scale=1.05) for (x, y, w, h) in rects: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) # 显示结果 cv2.imshow('result', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在代码中,我们首先加载了训练好的 SVM 分类器,并加载了测试图片。然后创建了 HOG 描述符,并设置 SVM 分类器。最后使用 detectMultiScale 函数检测目标,并绘制矩形框,最终在窗口中显示检测结果。 当然,这仅仅是一个简单的示例,实际的目标检测过程还需要根据具体的应用场景进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值