You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV HOGDescriptor报错vector<T> too long问题咨询及解决办法

解决OpenCV提取HOG描述符时的"vector too long"错误

错误原因在于你使用的默认HOG参数是为行人检测(64×128窗口)设计的,和你的193×16 ROI尺寸不兼容:默认窗口大小(64,128)远大于ROI的高度16,且ROI宽度193无法被默认块步长(8,8)整除,导致HOG计算时无法正确划分块和细胞,最终触发向量过长的异常。

解决办法

1. 自定义HOG参数适配ROI尺寸

首先确保ROI尺寸满足HOG参数的整除要求:

  • 细胞大小(cellSize)通常选8×8(常用值)
  • 块大小(blockSize)需为细胞大小的整数倍,比如16×16(2×2细胞)
  • 块步长(blockStride)一般设为和细胞大小一致(8×8)
  • 窗口大小(winSize)需等于ROI尺寸,且满足(winSize.width - blockSize.width) % blockStride.width == 0和(winSize.height - blockSize.height) % blockStride.height == 0

由于193无法被8整除,建议将ROI宽度调整为192(8的倍数),以下是适配192×16 ROI的代码:

import cv2 as cv

# 自定义HOG参数,适配192×16的ROI
winSize = (192, 16)
blockSize = (16, 16)
blockStride = (8, 8)
cellSize = (8, 8)
nbins = 9  # 默认方向箱数量

# 初始化HOG描述符
hog = cv.HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins)

# 读取图像并调整为目标尺寸
img = cv.imread("<path to image>", cv.IMREAD_GRAYSCALE)
img_roi = cv.resize(img, winSize)  # 统一调整为192×16

# 计算HOG描述符
desc = hog.compute(img_roi)
print(f"HOG描述符维度: {desc.shape}")

2. 统一正负样本尺寸

训练SVM时,所有正负样本必须保持相同尺寸,因此需要将正负样本都调整为192×16(或其他符合HOG参数要求的尺寸),保证HOG描述符的维度一致,才能用于SVM训练。

关键注意事项

  • 若坚持使用193×16的ROI,需调整块步长或细胞大小使其满足整除要求(比如将细胞宽度设为1,但这会大幅增加描述符维度,不推荐)
  • 训练SVM前,务必验证所有样本的HOG描述符长度一致,否则无法正常训练

内容的提问来源于stack exchange,提问作者tintin98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:50:19