用opencv进行频域傅立叶变换

时间:2011-04-10 13:32:57

标签: opencv

我正在尝试在频域中实现傅里叶变换。 我相应地使用了getOptimalDFTSize,并且我在更大的图像中复制了图像和蒙版,适合于傅里叶变换。我使用here中的示例代码作为参考 现在,我必须将实部和虚部分开,并将图像虚部与像素虚部一起按像素相乘,对于实部则相同。但是当我尝试这样做时,我得到以下错误信息:

  

OpenCV错误:断言失败(在= mulSpectrums中键入== srcB.type()&& srcA.size()== srcB.size()),文件/build/buildd/opencv-2.1.0/src /cxcore/cxdxt.cpp,第1855行   /build/buildd/opencv-2.1.0/src/cxcore/cxdxt.cpp:1855:错误:(-215)type == srcB.type()&&函数mulSpectrums中的srcA.size()== srcB.size()

代码如下:

//fourier transfromation of real and imaginary part
Mat complex_image, real_image, complex_mask, real_mask;

cv::dft(new_image, complex_image, DFT_COMPLEX_OUTPUT);
cv::dft(new_image, real_image, DFT_REAL_OUTPUT);

cv::dft(new_mask, complex_mask, DFT_COMPLEX_OUTPUT);
cv::dft(new_mask, real_mask, DFT_REAL_OUTPUT);



//pixelwise multiplication
Mat multiplied_complex, multiplied_real;
cv::mulSpectrums(complex_image, complex_mask, multiplied_complex, DFT_COMPLEX_OUTPUT );
cv::mulSpectrums(real_image, real_mask, multiplied_real, DFT_REAL_OUTPUT);

我在这里做错了什么?

1 个答案:

答案 0 :(得分:5)

图像和蒙版应具有相同的大小(宽度和高度)和(很可能是这个问题)类型。因此,如果它是不同的类型,您需要转换其中一个,以便它们具有相同的类型。