在 C++ 中使用 OpenCV 进行 DFT 的绝对值
Absolute Value of the DFT with OpenCV in C++
我正在尝试使用 OpenCV 在 C++ 中计算 DFT。我想要 DFT 的绝对值。为了计算它,我做了:
vector<float> areas, X_mag;
cv::Mat X;
...
cv::dft(areas, X, cv::DFT_COMPLEX_OUTPUT);
areas是一个50x1的向量,我想把areas的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 的绝对值向量?
我正在尝试使用 OpenCV 在 C++ 中计算 DFT。我想要 DFT 的绝对值。为了计算它,我做了:
vector<float> areas, X_mag;
cv::Mat X;
...
cv::dft(areas, X, cv::DFT_COMPLEX_OUTPUT);
areas是一个50x1的向量,我想把areas的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 的绝对值向量?