I am trying to compute the DFT in C++ with OpenCV. I want the absolute value of the DFT. To compute it I do:
vector<float> areas, X_mag; cv::Mat X; ... cv::dft(areas, X, cv::DFT_COMPLEX_OUTPUT);
areas is a 50×1 vector, and I want to store the absolute value of the DFT of areas in X_mag
The problem, is that I think there is no way to compute directly the absolute value, and I didn’t find any function that computes directly the absolute.
I tried to use absdiff:
cv::absdiff(X, cv::Scalar::all(0), X_mag);, but it only works if I use a std::vector instead of the cv::Mat.
If I don’t use the DFT_COMPLEX_OUTPUT, I get only the real part, so is not what I need.
I was thinking on computing manually the absolute value (sqrt(Re(X)^2 + Im(X)^2), but I think it would be too slow, and I don’t think that cv::Mat was thought to be iterated this way.
How could I get my 50×1 DFT’s absolute value vector?
vector<float> areas, X_abs; Mat X; Mat X_mag; ... cv::dft(areas, X, cv::DFT_COMPLEX_OUTPUT); cv::split(X, X_mag); cv::magnitude(X_mag, X_mag, X_abs);
And we will have the absolute value vector in X_abs.