0

2 つの生画像の FFT を取得しようとしています。しかし、私は得ていますunhandled exception (access violation)-理由がわかりませんでした。私はfftwライブラリを使用しています。最初に 2 つの画像を読み込んでから、FFT を計算します。ただし、計算を開始する前に、アクセス違反エラーが発生します。

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include "fftw3.h"

#define Width 2280
#define Height 170

unsigned char im2[170*2280];
unsigned char im1[170*2280];
float image1[170*2280];
float image2[170*2280];

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

    FILE* fp1, *fp2;

    //Read two images

    fp1 = fopen ("image1.raw" , "r");
    fread(im1, sizeof(unsigned char), Width* Height, fp1);

    fp2 = fopen ("image2.raw" , "r");
    fread(im2, sizeof(unsigned char), Width* Height, fp2);


    fclose(fp2);
    fclose(fp1);

    //Typecasting two images into float

    for (int i = 0; i < Width* Height; i++)
    {       
        image1[i]= (float)im1[i];
        image2[i] = (float)im2[i];

    }

    fftwf_plan fplan1, fplan2;
    fftwf_complex fft1[((Width/2)+1)*2];
    fftwf_complex fft2[((Width/2)+1)*2];

    fplan1 = fftwf_plan_dft_r2c_2d(Height, Width, (float*)image1, fft1, FFTW_ESTIMATE);
    fftwf_execute(fplan1);
    fftwf_destroy_plan(fplan1);

    fplan2 = fftwf_plan_dft_r2c_2d(Height,Width, image2, (fftwf_complex*)fft2, FFTW_ESTIMATE);
    fftwf_execute(fplan2);
    fftwf_destroy_plan(fplan2);

    _getch();
    return 0;
}
4

1 に答える 1

4

fft1fft21 つの出力行を保持するのに十分な大きさしかありません。行が必要ですHeight。正しいサイズを取得すると、スタックに対して大きすぎる可能性が高いため、おそらくそれらも動的に割り当てたいと思うでしょう。

fftwf_complex *fft1 = new fftwf_complex[((Width/2)+1)*2*Height];
fftwf_complex *fft2 = new fftwf_complex[((Width/2)+1)*2*Height];

delete []注意:後でこれらを解放するために電話することを忘れないでください。

于 2013-04-25T05:32:18.420 に答える