用opencv进行频域傅里叶变换



我想在频域中实现傅里叶变换。我使用相应的getOptimalDFTSize,复制图像和蒙版,在更大的图像中,适合傅里叶变换。我使用这里的示例代码作为参考。
现在,我必须分离实部和虚部,并对图像虚部和掩模虚部进行逐像素相乘,对实部也是如此。但是当我尝试这样做时,我得到以下错误消息:

OpenCV Error: Assertion failed (type == srcB.type() &&srcA.size() == srcB.size())中的mulSpectrums,文件/build/buildd/opencv-2.1.0/src/cxcore/cxdx .cpp,行1855/build/buildd/opencv-2.1.0/src/cxcore/cxdx .cpp:1855: error: (-215) type == srcB.type() &&srcA.size() == srcB.size() in function mulspectra

代码如下:

//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);

我在这里做错了什么?

图像和蒙版应该具有相同的大小(宽度和高度)和类型(很可能这是一个问题)。如果是不同的类型你需要将其中一个转换为相同的类型

相关内容

  • 没有找到相关文章

最新更新