用opencv进行频域傅里叶变换

mob*_*tte 2 opencv

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

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()&& srcA.size()== srcB.size( )在函数mulSpectrums中

代码如下:

//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);
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

Pol*_*Pol 5

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