我使用以下代码生成使用FFTW和OpenCV进行傅里叶变换的可视化。但是,我只是正确地获得了图像的上半部分。 任何人都可以解释代码是否有问题吗?
fft存储fftw_execute数据。
int nl= fftvis->height; // number of lines
// total number of element per line
int nc= fftvis->width * fftvis->nChannels;
// get the pointer to the image buffer
unsigned char *data= reinterpret_cast<unsigned char *>
(fftvis->imageData);
k =0;
for (int x=1; x<nl; x++) {
for (int y=0; y<nc; y+= fftvis->nChannels) {
data[y] = 10*log(sqrt((pow(fft[k++][0],2) + pow(fft[k++][1],2))));
//k+=1;
} // end of line
data+= step;
// next line
}
答案 0 :(得分:0)
您需要填充每个频道的RGB,但在执行y+= fftvis->nChannels
时您正在踩踏频道数据。
此外,data+= step;
会跳过数据的step
个字节,如果您正确对齐处理,则无需这样做。