函数detectMultiScal语法格式如下:
(rects, weights) = detectMultiScale(image [, winStride [, padding [, scale [, useMeanshiftGrouping]]]])
其中:
- rects——检测到的行人对应的矩形框
- weights——矩形框的权重值
- image——待检测图像
- winStride——sride(步幅),HOG检测窗口移动步长
- padding——padding(填充),边缘扩充的像素个数
- scale——构造金字塔结构图像时,采用的缩放因子,通常情况下取[1.01, 1.05]
- useMeanshiftGrouping——是否消除重叠的检测结果,True表示消除
import cv2 def detect(image,winStride,padding,scale,useMeanshiftGrouping): hog = cv2.HOGDescriptor() #初始化方向梯度直方图描述器 #设置SVM为一个预先训练好的行人检测器 hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) #获取(行人对应的矩形框、对应的权重) (rects, weights) = hog.detectMultiScale(image, winStride = winStride, padding = padding, scale = scale, useMeanshiftGrouping=useMeanshiftGrouping) # 绘制每一个矩形框 for (x, y, w, h) in rects: cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2) cv2.imshow("result", image) #显示原始效果 image = cv2.imread("human.jpg") #所检测的图片 winStride = (8,8) #每次行移动8个像素点,列移动8个像素点 padding = (2,2) #边缘添加像素点 通常可取(8, 8) (16, 16) (24, 24) (32, 32) scale = 1.03 #构造金字塔结构采取的比例值 useMeanshiftGrouping=True #消除重叠 detect(image,winStride,padding,scale,useMeanshiftGrouping) cv2.waitKey(0) cv2.destroyAllWindows()