我想问一下如何在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);
}
答案 0 :(得分:0)
这里发生的是你创建一个指向其他向量的std::vector
指针。那些其他矢量包含像素数据。但这些数据不一定是连续的。图像的每一行(或列)都存储在自己的内存段中。 OpenCV希望所有像素都在同一个内存段中。
简而言之,只需将像素数据复制到OpenCV支持的表单,例如cv::Mat
。