【问题标题】:Absolute Value of the DFT with OpenCV in C++C++ 中 OpenCV 的 DFT 绝对值
【发布时间】: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 的绝对值向量?

【问题讨论】:

标签: c++ opencv


【解决方案1】:

正如@Christoph Rackwitz 所说,我们可以使用splitmagnitude

vector<float> areas, X_abs;
Mat X;
Mat X_mag[2];

...

cv::dft(areas, X, cv::DFT_COMPLEX_OUTPUT);
cv::split(X, X_mag);
cv::magnitude(X_mag[0], X_mag[1], X_abs);

我们将在 X_abs 中得到绝对值向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多