首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EMGU CV中的正傅立叶变换和反傅立叶变换

EMGU CV中的正傅立叶变换和反傅立叶变换
EN

Stack Overflow用户
提问于 2013-03-25 03:04:36
回答 1查看 2.8K关注 0票数 1

我在emgu cv上用傅里叶变换做一个小实验。我的目标是对图像进行傅里叶变换,然后再进行反傅立叶变换,然后检查图像是否显示。从数学上讲,应该是这样的。

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

代码语言:javascript
复制
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-它仍然显示输出图像,但不幸的是,它不是输入的原始图像。所有显示的都是一张普通的灰色图像。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-04-05 16:08:19

尝尝这个,

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15602696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档