c++ - 尝试计算 2 个图像的 FFT(快速傅立叶变换)时发生访问冲突

标签 c++ image-processing access-violation fftw

我正在尝试对两张原始图像进行 FFT。但是我遇到了未处理的异常(访问冲突) - 我不知道为什么。我正在使用 fftw 库。 首先,我正在读取两个图像,然后计算 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;
}

最佳答案

fft1fft2 的大小仅足以容纳一个输出行 - 您需要 Height 行。您可能也想动态分配它们,因为一旦您拥有正确的大小,它们很可能对于堆栈来说太大了,例如

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

注意:不要忘记稍后调用 delete [] 来释放它们。

关于c++ - 尝试计算 2 个图像的 FFT(快速傅立叶变换)时发生访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16204779/

相关文章:

c++ - Visual Studio 中的嵌入式程序集文件

php - 调整大小后的图像中有黑色方 block

python - 通过单击图像中的位置来显示特定轮廓

c - 从文件中读取二进制数据

取消引用指向类成员的指针时发生 C++ 访问冲突

c - 如何将字符串保存在动态二维数组中?

c - C语言使用malloc的访问冲突

c++ - 如何打印 Qt 对话框或窗口?

C++: & lambda 捕获的指针是对对象的引用,还是对对象指针的引用?

c++ - cout 和 sizeof 没有返回我在 C++ 中所期望的