Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV HogDescriptor Python_Python_Opencv_Image Processing - Fatal编程技术网

OpenCV HogDescriptor Python

OpenCV HogDescriptor Python,python,opencv,image-processing,Python,Opencv,Image Processing,我想知道是否有人知道为什么在OpenCV的Python绑定中没有关于HogDescriptor的文档 也许我刚刚错过了它们,但我找到的唯一代码是以下线程: 如果在该线程中向下滚动,则会在其中找到以下代码: import cv2 hog = cv2.HOGDescriptor() im = cv2.imread(sample) h = hog.compute(im) 我已经对此进行了测试,它可以工作——因此Python绑定确实存在,只是文档没有。我想知道是否有人知道为什么HOG的Python绑定

我想知道是否有人知道为什么在OpenCV的Python绑定中没有关于HogDescriptor的文档

也许我刚刚错过了它们,但我找到的唯一代码是以下线程:

如果在该线程中向下滚动,则会在其中找到以下代码:

import cv2
hog = cv2.HOGDescriptor()
im = cv2.imread(sample)
h = hog.compute(im)

我已经对此进行了测试,它可以工作——因此Python绑定确实存在,只是文档没有。我想知道是否有人知道为什么HOG的Python绑定文档很难找到/不存在。有人知道我在任何地方都能读到关于HOG的教程吗(特别是通过Python绑定)?我是个新手,在我开始写我自己的东西之前,我想看看OpenCV是如何做东西的一些例子。

1。获取内置文档: python控制台上的以下命令将帮助您了解类描述符的结构:

导入cv2
帮助(cv2.HOGDescriptor())

2。示例代码: 下面是一段代码,用于使用不同的参数初始化cv2.HOGDescriptor(我在这里使用的术语是OpenCV文档中定义良好的标准术语):

3。推理: 结果hog描述符的维度为: 9个方向X(获得1个规格化的4个角块+获得2个规格化的边上的6x4块+获得4个规格化的6x6块)=1764。因为我只为hog.compute()提供了一个位置

4。初始化描述符的不同方式:
另一种初始化方法是从包含所有参数值的xml文件:

hog = cv2.HOGDescriptor("hog.xml")
要获取xml文件,可以执行以下操作:

hog = cv2.HOGDescriptor()
hog.save("hog.xml")

并在xml文件中编辑相应的参数值。

我也在想同样的问题。除了源cpp代码外,几乎找不到OpenCV
HOGDescriptor
的任何文档

Scikit图像有一个关于提取和说明HOG特征的很好的示例页面。它提供了一种探索HOG的替代方法。这是有案可查的

然而,关于scikit image的hog实现,有一点需要指出。它的Python代码没有实现直方图方向的分块,而只是基于落入哪个分块的大小值进行简单的分块。看看它。这并不完全符合Dalal和Triggs的论文

实际上,我发现基于OpenCV的HOG实现的对象检测比使用scikit图像中的api更准确。这对我来说很有意义,因为加权投票很重要。通过向箱子投加权票,当梯度大小落在边界上或周围时,直方图的变化会大大减少。克里斯·麦考密克(Chris McCormick)写了一篇非常有见地的关于hog的文章,在这篇文章中,定向binning被清楚地描述为

对于每个梯度向量,它对直方图的贡献由向量的大小给出(因此,更强的梯度对直方图的影响更大)。我们在两个最近的垃圾箱之间分摊捐款。例如,如果梯度向量的角度为85度,那么我们将其大小的1/4添加到以70度为中心的面元,将其大小的3/4添加到以90度为中心的面元

我相信分割贡献的目的是最小化两个箱子之间边界上的梯度问题。否则,如果一个强梯度正好位于一个箱子的边缘,梯度角度的微小变化(将梯度推进下一个箱子)可能会对直方图产生强烈影响


因此,如果可能的话,使用OpenCV来计算hog(还没有深入研究它的代码,也不想这样做,但我认为OpenCV的hog实现方式更合适)。我不仅发现检测精度有所提高,而且运行速度也更快。与scikit image的hog代码相比,它的文档几乎没有。然而,让OpenCV的版本在实践中运行仍然是可行的——这是一个传递窗口大小、单元格大小、块大小、块步幅、方向数的正确参数的问题,等等。其他参数我只是使用默认值。

这里的文档是否仍然准确,它说它只能使用默认大小的块和单元格?这是HOG的一个很好的实现,因为它可以选择提供位置。但是我如何想象它呢?我觉得没有可视化是一个黑匣子,不能相应地调整参数。
hog = cv2.HOGDescriptor()
hog.save("hog.xml")