【发布时间】:2018-01-11 07:36:52
【问题描述】:
我在彩色图像上计算了HOGDescriptor,并在 Python 和 C++ 中发现了不同的结果,opencv 版本、HOG 参数和图像在两者上都相同。
在默认 BGR 图像上用 C++ 和 Python 计算的 HOG 描述符之间存在惊人的差异
在默认 BGR2RBG 图像上用 C++ 和 Python 计算的 HOG 描述符之间再次存在惊人的差异。然而,C++ 似乎遵循了(由 Dalal,Triggs 推荐)将 HOG 计算为所有三个通道的最大值的方法,这可以通过 BGR 和 RGB 图像具有相同的 HOG 描述符这一事实证明,但 Python 没有
然而,图像的灰度版本显示相似(但不相同)的描述符值。
HOG 参数:
cv::HOGDescriptor hogDescriptor;
hogDescriptor.blockSize = cv::Size(8, 8);
hogDescriptor.cellSize = cv::Size(4, 4);
hogDescriptor.blockStride = cv::Size(4, 4);
hogDescriptor.nbins = 9;
hogDescriptor.signedGradient = true;
hogDescriptor.winSize = cv::Size(72, 72);
我的问题是,为什么 C++ 和 Python 实现之间存在如此大的差异,即使 Python 只是 C++ 版本的包装器?
【问题讨论】:
-
@ThomasMatthews。虽然这两个问题看起来很相似,但它们在计算 HOG 时提出了不同的问题:opencv 在以相同语言在不同颜色图像上计算 HOG 和在不同语言在相同色彩空间上计算 HOG 的行为
-
说
cv2Python 模块“只是一个包装器”有点错误。最初的cv模块是,但cv2使用 numpy 类型进行计算,所以事情通常会有很小的差异(不知道这是否是这里的实际问题)。