OpenCV HOG 描述符参数

esh*_*ima 5 python opencv object-detection haar-classifier opencv3.0

cv2.HOGDescriptor()我正在尝试使用默认的人员分类器从摄像机的源中检测人员。

识别器有点工作,但老实说,我在理解分别分配给winStridepaddingscale的值时遇到了问题groupThreshold

目前,相机输入的帧大小为1280 X 720,我将其大小调整为400 X 400detectMultiScale ,然后使用参数执行

hogParams = {'winStride': (8, 8), 'padding': (32, 32), 'scale': 1.05, 'finalThreshold': 2}
Run Code Online (Sandbox Code Playgroud)

根据这个答案,我了解这些参数的作用和代表的含义。

我的问题是,有没有办法将图像大小与这些值映射?数学方程?一种估算方法?我不一定要求一种具体的方法,甚至一种给出所有值的方法,但比试错幻数更好的方法。

大多数参考文献和教程几乎都使用幻数,但没有给出它们如何获得它们的建议。

PS:如果您仍然不确定我的问题,这里有一个视觉辅助工具 我在寻找云

小智 3

这里没有灵丹妙药。不幸的是,它非常不稳定,因为最佳解决方案会因输入数据而异。

这里有一些额外的指导:

  • 如果步幅 > 窗口大小,您的探测器甚至可能无法在该人身上运行。我总是认为步幅与窗口大小有关,例如 64/8。
  • 如果scale~1,不会发生太多事情。1.2、1.3 等值通常更好。该参数本质上是缩小图像,然后再次运行检测器。我们希望,如果人在第一次运行时对于探测器来说太大,那么在缩小之后他们可能会达到合适的尺寸。例如,如果您的检测器尺寸是默认的 64x128,但图像中的某个人高 150 像素,检测器可能不会意识到这是一个人,因为它只能同时查看腿部或躯干。如果我们缩小 150 / 1.2 = 125,该人现在可能会被实际检测到。(愚蠢的数字。如果人的高度为 150 像素,它就可以检测到该人,这是非常合理的。但你明白了。)

最好的方法就是进行一些尝试。选择一些您认为代表您的用例的图像/视频,创建端到端设置,并尝试几个不同的参数设置。如果没有检测到人员,请考虑他们的尺寸与探测器尺寸的关系。它们比那个大吗?更小?如果它们较小,则可以增加比例因子,或增加级别数。如果它们更大,则进一步缩小输入图像。

.. 1280 X 720,我将其大小调整为 400 X 400...

旁注:如果您只是简单地调整大小而不进行裁剪,则会得到不好的结果。将大小调整为相同的宽高比,例如 711x400,或者在调整大小之前将初始图像裁剪为正方形。