咨询Python中cv2.HOGDescriptor参数、输入要求与输出规则
OpenCV Python HOGDescriptor 接口说明
以下为参考实现代码:
winSize = (4, 4) blockSize = (4, 4) blockStride = (4, 4) cellSize = (4, 4) nbins = 9 derivAperture = 1 winSigma = 4. histogramNormType = 0 L2HysThreshold = 2.0000000000000001e-01 gammaCorrection = 0 nlevels = 64 winStride = (4, 4) padding = (4, 4) locations = ((10, 20),) hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins,derivAperture,winSigma, histogramNormType,L2HysThreshold,gammaCorrection,nlevels) res = hog.compute(im,winStride,padding,locations)
注意:所有尺寸类元组参数的顺序均为(宽度, 高度),和OpenCV图像默认的(行数, 列数)坐标顺序相反,传参时需注意顺序不要颠倒
构造函数参数(初始化HOG描述子实例时传入)
winSize:类型为tuple[int, int],检测窗口的尺寸,宽高必须是blockStride的整数倍blockSize:类型为tuple[int, int],每个块的尺寸,宽高必须是cellSize的整数倍blockStride:类型为tuple[int, int],块在窗口内滑动的步长,宽高必须是cellSize的整数倍cellSize:类型为tuple[int, int],每个细胞单元的像素尺寸,单元内会统计梯度方向直方图nbins:类型为int,梯度直方图的方向分箱数量,常用取值为9,对应将0-180度无向梯度划分为9个等距区间derivAperture:类型为int,计算图像梯度时使用的Sobel算子核大小,支持取值1、3、5、7;取1时不使用Sobel核,直接用[-1,0,1]的一阶中心差分计算梯度winSigma:类型为float,检测窗口预处理高斯平滑的高斯核标准差,用于对梯度幅值做空间加权histogramNormType:类型为int,块直方图的归一化类型,0对应最常用的L2-Hys归一化L2HysThreshold:类型为float,L2-Hys归一化使用的截断阈值,常用取值为0.2gammaCorrection:类型为int,布尔开关,传0表示关闭输入图像的gamma校正预处理,传1表示开启nlevels:类型为int,多尺度检测时使用的图像金字塔最大层数
compute() 特征计算方法参数
im:类型为numpy.ndarray,输入图像,支持单通道灰度图或三通道BGR彩色图,常规使用uint8数据类型即可winStride:类型为tuple[int, int],检测窗口在整图上滑动的步长,宽高必须是blockStride的整数倍padding:类型为tuple[int, int],图像边缘的补零尺寸,用于解决边缘位置窗口超出图像范围的计算问题locations:类型为tuple[tuple[int, int], ...],手动指定的检测窗口左上角坐标集合;传入该参数时会跳过滑动窗口逻辑,仅计算指定坐标位置的HOG特征
输出内容说明
- 返回值
res类型为numpy.ndarray,是形状为(特征总维度, 1)的float32类型列向量 - 单个检测窗口的特征维度计算规则:
单个块特征维度 =(blockSize.width / cellSize.width) * (blockSize.height / cellSize.height) * nbins
单窗口块总数 =((winSize.width - blockSize.width) / blockStride.width + 1) * ((winSize.height - blockSize.height) / blockStride.height + 1)
单窗口特征维度 = 单个块特征维度 * 单窗口块总数 - 如果传入多个检测位置、或使用滑动窗口生成多个检测位置,返回结果为所有位置的特征按顺序拼接后的数组
内容的提问来源于stack exchange,提问作者Farah Fekih
相关产品推荐
相关产品推荐

