我是OpenCV和图像处理算法的新手。我需要在C++中使用OpenCV进行逆离散傅里叶变换,但我不知道如何。我通过互联网搜索,我没有找到答案。我正在使用此页面的代码对程序进行傅里叶变换:http://opencv.itseez.com/doc/tutorials/core/discrete_fourier_transform/discrete_fourier_transform.html。我试图做与该代码相反的,但我不知道我在做什么错。我的代码是在这里(我认为整个代码是错误的):OpenCV逆向傅立叶变换
void doFourierInverse(const Mat &src, Mat &dst) {
normalize(src, dst, 0, -1, CV_MINMAX);
int cx = dst.cols/2;
int cy = dst.rows/2;
Mat q0(dst, Rect(0, 0, cx, cy));
Mat q1(dst, Rect(cx, 0, cx, cy));
Mat q2(dst, Rect(0, cy, cx, cy));
Mat q3(dst, Rect(cx, cy, cx, cy));
Mat tmp;
q0.copyTo(tmp);
q3.copyTo(q0);
tmp.copyTo(q3);
q1.copyTo(tmp);
q2.copyTo(q1);
tmp.copyTo(q2);
dst = dst(Rect(0, 0, dst.cols & -2, dst.rows & -2));
exp(dst, dst);
dst -= Scalar::all(1);
Mat planes[2];
polarToCart(dst, Mat::zeros(dst.rows, dst.cols, dst.type()), planes[0], planes[1]);
merge(planes, 2, dst);
idft(dst, dst, DFT_INVERSE | DFT_SCALE);
split(dst, planes);
dst = planes[0];
}
您认为您的代码和/或结果产生的“错误”是什么? – 2012-04-22 19:17:50
我认为polarToCart函数对函数的幅度并不好。 – 2012-04-22 20:38:11