我计算了 HOGDescriptor
在彩色图像上,在 Python 和 C++ 中发现不同的结果,opencv 版本、HOG 参数和图像在两者上都是相同的。
在默认 BGR 图像上用 C++ 和 Python 计算的 HOG 描述符之间存在惊人的差异
在默认 BGR2RBG 图像上,用 C++ 和 Python 计算的 HOG 描述符之间再次存在惊人的差异。然而,C++ 似乎遵循推荐的(Dalal,Triggs)计算 HOG 的方式作为所有三个 channel 的最大值,事实证明 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++ 版本的包装器?
最佳答案
我找到了灰度图像的解决方案。 HOG 描述符的 Python 包装器代码将 gammaCorrection
标志初始化为 False
而不是 C++ 中的 True
。将两者的标志手动设置为 True 或 False 会导致 C++ 和 Python 在灰度图像上的值完全相同。
但是,对于彩色图像,问题仍然存在。
我最好的猜测是,就像 gammaCorrection
标志差异一样,Python 包装器中也发生了类似的事情。
关于python - 在 Python 和 C++ 中根据彩色图像计算的 pig 描述符的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45488589/