【发布时间】:2021-11-19 17:47:23
【问题描述】:
我正在尝试使用 OpenCV 在 C++ 中计算 DFT。我想要 DFT 的绝对值。要计算它,我会这样做:
vector<float> areas, X_mag;
cv::Mat X;
...
cv::dft(areas, X, cv::DFT_COMPLEX_OUTPUT);
areas 是一个 50x1 的向量,我想将区域的 DFT 的绝对值存储在 X_mag 中
问题是我觉得没有办法直接计算绝对值,也没有找到直接计算绝对值的函数。
我尝试使用absdiff:cv::absdiff(X, cv::Scalar::all(0), X_mag);,但它仅在我使用 std::vector 而不是 cv::Mat 时才有效。
如果我不使用 DFT_COMPLEX_OUTPUT,我只能得到实部,所以不是我需要的。
我正在考虑手动计算绝对值 (sqrt(Re(X)^2 + Im(X)^2),但我认为它太慢了,我不认为 cv::Mat被认为是这样迭代的。
如何获得 50x1 DFT 的绝对值向量?
【问题讨论】:
-
cv::split得到真实和虚构的“平面”,然后cv::magnitude?也许这篇文章中的一些东西可以帮助你docs.opencv.org/master/d8/d01/…