【问题标题】:Fourier transform of an image in EmguCVEmguCV中图像的傅里叶变换
【发布时间】:2011-10-08 20:47:33
【问题描述】:

谁能告诉我 emgucv 2.3 中是否存在用于查找图像傅立叶变换的内置函数?

提前致谢

【问题讨论】:

    标签: emgucv


    【解决方案1】:

    来自我的回答Fourier Transform + emgucv

    你所追求的功能是 CvInvoke.cvDFT 它在技术上调用 opencv 方法,但它应该是你所追求的

    这是从 cvDFT 中分离虚部和实部的代码:

    Image<Gray, float> image = new Image<Gray, float>(open.FileName);
    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);
    
    //The Real part of the Fourier Transform
    Matrix<float> outReal = new Matrix<float>(image.Size);
    //The imaginary part of the Fourier Transform
    Matrix<float> outIm = new Matrix<float>(image.Size);
    CvInvoke.cvSplit(dft, outReal, outIm, IntPtr.Zero, IntPtr.Zero);
    
    //Show The Data       
    CvInvoke.cvShowImage("Real", outReal);
    CvInvoke.cvShowImage("Imaginary ", outIm);
    

    干杯,

    克里斯

    【讨论】:

    • 由于某种原因完全使用了这段代码,它挂在 CvInvoke.cvCopy 上
    • 您好,您使用的是什么版本的 EMGU。请确保图像和 complexImage 大小相同(包括 ROI),否则该方法将冻结。欢呼
    • 问题出在频道数量上。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多