如何在2d矢量中使用open dft

时间:2018-01-07 15:11:48

标签: c++ opencv

我想问一下如何在opencv中使用dft函数用2d向量进行傅立叶变换。

我的代码中有错误...

谢谢大家

    //2d vector in here v1 and v2 
    //vector size is 1000*1000
    //i have to do about 600 images in this process 
    for (int k = 0; k < 600; k++){
        vector <vector <complex < double >>> v1(InputWidth, vector<complex < double >>(InputHeight));
        vector <vector <complex < double >>> v2(InputWidth, vector<complex < double >>(InputHeight));
        for (int i = 0; i < InputWidth; i++) {
            int tempIndex = i*InputHeight;
            for (int j = 0; j < InputHeight; j++)
            {
                int Correction_value = ProjectionImage[k]->data.s[tempIndex + j] * meshGrid[tempIndex + j];
                ProjectionImage[k]->data.s[tempIndex + j] = Correction_value;
                //v1 is an image
                v1[i][j] = Correction_value;
            }
        }
        //error happen in here
        dft(v1, v2, DFT_COMPLEX_OUTPUT);
        //do frequency filter
        for (int i = 0; i < InputWidth; i++) {
            for (int j = 0; j < InputHeight; j++)
            {
                v2[i][j] *= filter_2D[i][j];
            }
        }
        //inverse fourier transform
        idft(v2, v1, DFT_COMPLEX_OUTPUT);
   }

error message

1 个答案:

答案 0 :(得分:0)

这里发生的是你创建一个指向其他向量的std::vector指针。那些其他矢量包含像素数据。但这些数据不一定是连续的。图像的每一行(或列)都存储​​在自己的内存段中。 OpenCV希望所有像素都在同一个内存段中。

简而言之,只需将像素数据复制到OpenCV支持的表单,例如cv::Mat