无论如何使用来自FFTW3的fftw_plan fftw_plan_dft_r2c_2d(int n0, int n1,double *in, fftw_complex *out, unsigned flags)
函数和输入作为来自cv :: Mat对象的数据?我目前正在使用的代码如下所示:
data_in = fftwf_alloc_real(width * height);
fft = fftwf_alloc_complex((width/2+1) * height);
plan_f=fftwf_plan_dft_r2c_2d( height , width , data_in, fft , FFTW_MEASURE );
// Prepare input data
for(int i = 0,k=0; i < height; ++i) {
const float* row = input.ptr<float>(i);
for(int j = 0; j < width; j++) {
data_in[k]=(float)row[j];
k++;
}
}
// Exectue fft
fftwf_execute( plan_f );
其中 data_in 是数组类型float*
,输入是cv::Mat
。我想摆脱将数据复制到 data_in 的for循环,并使用输入中已经分配的数据。
答案 0 :(得分:0)
如果我正确理解了您的代码段,您希望将数据从cv::Mat
复制到浮点数组。假设您的cv::Mat
类型为CV_32F
(浮点数),而不是单独复制每个元素,您只需使用memcpy
复制整个块:
std::memcpy(data_in, input.data, input.total() * sizeof(float));
或者您可以完全跳过复制,只需使用(float*)input.data