Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

OpenCV split function doesn't work properly

I get a 2 channels Mat from the result of dft and I want to split it into real part and the imaginary part. However, when using the split function in OpenCV, it give me some error after split.

cv::dft(fft2u_in,fft2u_in);

cv::Mat fftImg[2];
cv::split(fft2u_in,fftImg);

std::cout<<cv::sum(fft2u_in)<<std::endl;
std::cout<<cv::sum(fftImg[0])<<std::endl;
std::cout<<cv::sum(fftImg[1])<<std::endl;

The output is:

[3.39149e+08, 2.82766, 0, 0]  //sum before split
[3.39149e+08, 0, 0, 0]        //sum of real part after split
[11.1087, 0, 0, 0]            //sum of imag after split

The real part is equal while the imaginary part has huge error. I don't know why. Is it because the Mat type change or any thing else?

Also, my dft calculated by opencv has little error in comparison with doing the fft2 in Matlab. Is this acceptable and is there any way I can make them identical? Thanks.