代码语言:javascript复制
import cv2
import numpy as np
import matplotlib.pylab as pylab
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png')#原始图像
hog=cv2.HOGDescriptor()#HOG描述子
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())#SVM分类器
(foundBoundingBoxes,weights)=hog.detectMultiScale(img,winStride=(2,2),padding=(8,8),scale=1.02,finalThreshold=0)
print(len(foundBoundingBoxes))
imgWithRawBboxes=img.copy()
for (hx,hy,hw,hh) in foundBoundingBoxes:
cv2.rectangle(imgWithRawBboxes,(hx,hy),(hx hw,hy hh),(0,0,255),1)
pylab.figure(figsize=(20,12))
imgWithRawBboxes=cv2.cvtColor(imgWithRawBboxes,cv2.COLOR_BGR2RGB)
pylab.imshow(imgWithRawBboxes,aspect='auto')
pylab.axis('off')
pylab.show()
11
算法:HOG目标检测是通过在测试图像上重复地进入一个64像素宽、128像素高的窗口并计算HOG描述符来完成的。由于HOG计算不包含尺度的内在意义,且目标可以出现在一幅图像的多个尺度中,因此HOG计算在尺度金字塔的每一层上是逐步重复的。尺度金字塔中每一层之间的尺度因子通常在1.05和1.2之间,图像重复地按尺度缩小,直到尺度的源帧不再能容纳完整的HOG窗口。如果SVM分类器以任何尺度预测检测目标,则返回相应的边界框。这种技术比Viola-Jones目标检测更精确,但计算上更复杂。