我正在尝试在频域中实现傅立叶变换。
我相应地使用了 getOptimalDFTSize ,并以更大的图像复制了图像和掩模,适合傅立叶变换。我使用了 here 中的示例代码作为引用。
现在,我必须分离实部和虚部,并执行图像虚部与掩模虚部的像素乘法,对于实部也是如此。但是当我尝试这样做时,我收到以下错误消息:
OpenCV Error: Assertion failed (type == srcB.type() && srcA.size() == srcB.size()) in mulSpectrums, file /build/buildd/opencv-2.1.0/src/cxcore/cxdxt.cpp, line 1855 /build/buildd/opencv-2.1.0/src/cxcore/cxdxt.cpp:1855: error: (-215) type == srcB.type() && srcA.size() == srcB.size() in function 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);
我在这里做错了什么?
最佳答案
图像和蒙版应具有相同的尺寸(宽度和高度)和类型(很可能这是问题)。因此,如果它是不同的类型,您需要转换其中之一,以便它们具有相同的类型。
关于opencv - 使用opencv进行频域傅里叶变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5612074/