OpenCV Python 和方向梯度直方图

5
有没有关于在Python OpenCV中使用HOGDescriptor功能的有用文档?我已经阅读了C++文档,但Python版本的功能不同,我无法通过尝试来弄清楚它。
最具体地说,我正在寻找一个Python中的OpenCV命令,它以图像和像素位置作为输入(可能还有一些关于检测窗口大小的参数),然后只返回包含HOG特征向量的Python数组(即列表或NumPy数组等,其中列表的第j个元素是由梯度方向直方图的第j个组成部分)。
我的目标是将这些直方图馈送到scikits.learn SVM管道中(以便避免OpenCV SVM训练),但要做到这一点,我需要实际的特征向量本身,而不是OpenCV似乎使用的HOG处理链管道的类型。
任何其他Python实现的HOG代码也可以。但我需要与我自己编写的另一个代码库进行比较,因此需要相当高效的东西。

注意:一个合理的C++可执行文件,具有易于使用的命令行参数,也可以工作,我可以将其包装到我的Python代码中。如果您知道任何具有高效HOG代码的项目,那可能会有所帮助。 - ely
4个回答

5
这有点晚了,但是以后参考一下,scikit-image实现了HOG。这是一个函数,可以提取给定图像的方向梯度直方图。请参考scikit-imageHOG

0

我从那个链接下载的归档文件中没有看到任何Python代码。唯一与HOG相关的东西是一个名为'cvHogFeatureCal'的可执行文件,但我找不到任何文档。另一个问题是,OpenCV通常将分类器实现为级联,其中用户输入硬负图像,然后输入真正的正面图像进行训练,而OpenCV自动执行所有步骤以生成分类器。我需要避免这种情况,只需劫持HOG特征向量,然后使用不同的软件(scikits.learn)进行分类器训练。 - ely

0

你觉得加入一点Matlab的灵感如何,这与文章相关呢?


谢谢!我可能可以自己将其翻译成Python。不过将其移植到其他语言可能会更难一些。 - ely

0

'Poselets'实现这里有一个HOG描述符的C实现,虽然是为matlab编写的,但可以使用ctypes和numpy适应python运行。

您可以删除所有mex例程,并将输入和输出数组声明为C函数中的float *

您确实需要确保您的numpy数组是Fortran连续的。这可以通过以下方式实现:

image = image.copy(order='F', dtype = float32)


我经常使用Poselet的东西。基于他们的Java代码对于浏览器注释工具是多么不被记录和难以理解,我倾向于只使用置顶帖子中的Matlab代码。Poselet的想法很棒,但事实上(a)它是在Matlab中,(b)他们不愿意通过提供任何支持来帮助其他科学家,这使我不太愿意使用他们的东西。从Maurits那里翻译顶部的Matlab例程可能需要同样多的工作量。 - ely
很好,我没有太多尝试过他们的实现,主要是因为缺乏文档!但是,我已经使用了他们的HOG例程构建了类似的东西,就像我上面概述的那样,它运行良好。如果速度是优先考虑的因素,利用他们的C例程可能比在Python中使用嵌套循环更好的解决方案。 - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接