python - 在 Python 和 C++ 中根据彩色图像计算的 pig 描述符的差异

标签 python c++ opencv

我计算了 HOGDescriptor在彩色图像上,在 Python 和 C++ 中发现不同的结果,opencv 版本、HOG 参数和图像在两者上都是相同的。 在默认 BGR 图像上用 C++ 和 Python 计算的 HOG 描述符之间存在惊人的差异

First 100 values of BGR HOG Descriptor in C++ First 100 values of BGR HOG Descriptor in Python

在默认 BGR2RBG 图像上,用 C++ 和 Python 计算的 HOG 描述符之间再次存在惊人的差异。然而,C++ 似乎遵循推荐的(Dalal,Triggs)计算 HOG 的方式作为所有三个 channel 的最大值,事实证明 BGR 和 RGB 图像具有相同的 HOG 描述符,但 Python 没有

First 100 values of RGB HOG Descriptor in C++ First 100 values of RGB HOG Descriptor in Python

然而,图像的灰度版本显示相似(但不相同)的描述符值。

First 100 values of GRAY HOG Descriptor in C++ and 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 在灰度图像上的值完全相同。 enter image description here

但是,对于彩色图像,问题仍然存在。

enter image description here

我最好的猜测是,就像 gammaCorrection 标志差异一样,Python 包装器中也发生了类似的事情。

关于python - 在 Python 和 C++ 中根据彩色图像计算的 pig 描述符的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45488589/

相关文章:

python - 使用 PyRun_File()/PyObject_CallFunction() 时,如何将 Objective C 实例传递到 PyObjC Python 函数中?

python - Pandas 中的高级数据透视表

Python 捕获 stdout/stderr 并在查看输出时记录到文件

c++ - 正确释放 SDL_Surface?

android - OpenCV,Java:特定区域中的颜色检测

python - 如果列表中不存在该行中的条目,则删除完整的行

c++ - 如何在 gedit 中使用外部工具交互式运行 C++ 程序

c++ - CGRectMake(或其他 Make 函数)究竟做了什么?

c++ - 从 SVN 编译 Opencv

opencv - 关于openCv的问题