我正在尝试在频域中实现傅里叶变换。
我相应地使用了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);
我在这里做错了什么?
答案 0 :(得分:5)
图像和蒙版应具有相同的大小(宽度和高度)和(很可能是这个问题)类型。因此,如果它是不同的类型,您需要转换其中一个,以便它们具有相同的类型。