2 #include "fft_opencv.h"
4 void FftOpencv::init(unsigned width, unsigned height)
8 std::cout << "FFT: OpenCV" << std::endl;
11 void FftOpencv::set_window(const cv::Mat &window)
16 ComplexMat FftOpencv::forward(const cv::Mat &input)
18 cv::Mat complex_result;
19 cv::dft(input, complex_result, cv::DFT_COMPLEX_OUTPUT);
20 return ComplexMat(complex_result);
23 ComplexMat FftOpencv::forward_window(const std::vector<cv::Mat> &input)
25 int n_channels = input.size();
26 ComplexMat result(input[0].rows, input[0].cols, n_channels);
28 for (int i = 0; i < n_channels; ++i) {
29 cv::Mat complex_result;
30 cv::dft(input[i].mul(m_window), complex_result, cv::DFT_COMPLEX_OUTPUT);
31 result.set_channel(i, complex_result);
36 cv::Mat FftOpencv::inverse(const ComplexMat &inputf)
39 if (inputf.n_channels == 1) {
40 cv::dft(inputf.to_cv_mat(), real_result, cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT | cv::DFT_SCALE);
42 std::vector<cv::Mat> mat_channels = inputf.to_cv_mat_vector();
43 std::vector<cv::Mat> ifft_mats(inputf.n_channels);
44 for (int i = 0; i < inputf.n_channels; ++i) {
45 cv::dft(mat_channels[i], ifft_mats[i], cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT | cv::DFT_SCALE);
47 cv::merge(ifft_mats, real_result);
52 FftOpencv::~FftOpencv()