2013-03-24 92 views
1

我正在使用emgu cv上的傅立叶变换做一个小实验。我的目标是对图像进行傅立叶变换,然后再进行逆傅里叶变换,并检查图像是否显示。数学上,它应该。EMGU中的直接和逆傅立叶变换CV

这是我的代码,我相信这是正确的

Image<Gray, float> image = new Image<Gray, float>("c://box1.png"); 
IntPtr complexImage = CvInvoke.cvCreateImage(image.Size, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_32F, 2); 

CvInvoke.cvSetZero(complexImage); // Initialize all elements to Zero 
CvInvoke.cvSetImageCOI(complexImage, 1); 
CvInvoke.cvCopy(image, complexImage, IntPtr.Zero); 
CvInvoke.cvSetImageCOI(complexImage, 0); 

Matrix<float> dft = new Matrix<float>(image.Rows, image.Cols, 2); 
CvInvoke.cvDFT(complexImage, dft, Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, 0); 


Matrix<float> idft = new Matrix<float>(dft.Rows, dft.Cols, 2); 
CvInvoke.cvDFT(dft, idft, Emgu.CV.CvEnum.CV_DXT.CV_DXT_INVERSE, 0); 

IntPtr complexImage2 = CvInvoke.cvCreateImage(idft.Size, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 2); 

CvInvoke.cvShowImage("picture", idft); 
System.Threading.Thread.Sleep(99999); // to wait and see the picture 

我有两个问题:

1-错误:错误显示出来说:“OpenCV的:源图像必须有1,3或4渠道“我相信它与IDFT相关,但我不能解决它

2-它仍然显示输出图像,但不幸的是,它不是输入的原始图像。所有显示的都是纯灰色的图像。

谢谢。

+0

参考这个讨论在这里。 http://stackoverflow.com/questions/16669007/emgu-opencv-fft-of-image-not-yielding-expected-results。 以上方法不完整。 – 2015-10-15 21:33:34

回答

0

试试这个,

Image<Gray, System.Single> _image = new Image<Gray, System.Single>("c://box1.png"); 
Image<Gray, System.Single> DFTimage = new Image<Gray, System.Single>(_image.Size); 
Image<Gray, System.Single> Original = new Image<Gray, System.Single>(_image.Size); 
CvInvoke.cvDFT(_image.Ptr, DFTimage.Ptr,Emgu.CV.CvEnum.CV_DXT.CV_DXT_FORWARD, -1); 
CvInvoke.cvDFT(DFTimage.Ptr, Original.Ptr,Emgu.CV.CvEnum.CV_DXT.CV_DXT_INVERSE, -1); 
CvInvoke.cvShowImage("picture", Original);