c++中使用OpenCV的DFT的绝对值



我试图用OpenCV在c++中计算DFT。我想要DFT的绝对值。为了计算它,我这样做:

vector<float> areas, X_mag; 
cv::Mat X;
...
cv::dft(areas, X, cv::DFT_COMPLEX_OUTPUT);

的面积是一个50x1的向量,我想把面积的DFT的绝对值存储在X_mag

中问题是,我认为没有办法直接计算绝对值,而且我没有找到任何函数可以直接计算绝对值。

我试图使用absdiff:cv::absdiff(X, cv::Scalar::all(0), X_mag);,但只有当我使用std::矢量而不是cv::Mat时才有效。

如果我不使用DFT_COMPLEX_OUTPUT,我只得到实部,所以不是我需要的。

我想手动计算绝对值(sqrt(Re(X)^2 + Im(X)^2),但我认为它太慢了,我不认为cv::Mat被认为是这样迭代的。

我怎样才能得到50x1 DFT的绝对值向量?

正如@Christoph Rackwitz所说,我们可以使用分割和大小。

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中的绝对值向量

最新更新