2012-11-19 170 views
0

使用以下代碼生成使用FFTW和OpenCV進行傅里葉變換的可視化。但是,我只能正確獲取圖像的上半部分。 任何人都可以解釋,如果代碼有問題嗎?fft使用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

你在哪裏打電話給fftw?你使用哪些fftw功能? – CookieOfFortune

+0

就在調用fftw_execute的代碼塊之前,數據存儲在「fft」中。我試圖想象傅里葉變換的幅度。 –

+0

您使用哪種fftw計劃?你有正確的數據大小對齊嗎?你在雙打上做fftw,然後顯示花車嗎? – CookieOfFortune

回答

0

您需要填寫每個通道的RGB,但在執行y+= fftvis->nChannels步過通道的數據。
此外,data+= step;將跳過您的數據的step字節,如果您正確對齊處理,這不是必需的。