• Opencv中的dft()和idft()示例


    傅里叶变换的公式,大家脑部,本实例是先将一副图像做傅里叶变换,再对傅里叶阵列做逆变换,代码如下:

    #include <iostream>
    #include<opencv2/opencv.hpp>
    
    using namespace cv;
    using namespace std;
    
    void dftshift(Mat& ds)
    {
        int cx=ds.cols/2;//图像的中心点x坐标
        int cy=ds.rows/2;//图像的中心点y坐标
        Mat q0=ds(Rect(0,0,cx,cy));//左上
        Mat q1=ds(Rect(cx,0,cx,cy));//右上
        Mat q2=ds(Rect(0,cy,cx,cy));//左下
        Mat q3=ds(Rect(cx,cy,cx,cy));//右下
    
        Mat tmp;
        q0.copyTo(tmp);
        q3.copyTo(q0);
        tmp.copyTo(q3);
    
        q1.copyTo(tmp);
        q2.copyTo(q1);
        tmp.copyTo(q2);
    }
    
    void myimshow(const Mat& complexImg)
    {
        Mat mag;
        //对复数图像计算幅值
        Mat planes[2];
        split(complexImg,planes);
        magnitude(planes[0],planes[1],mag);
        //对幅值去对数log
        Mat mag_log;
        mag +=Scalar::all(1);
        cv::log(mag,mag_log);
        //对幅值图像做归一化处理
        Mat mag_norm;
        cv::normalize(mag_log,mag_norm,0,1,CV_MINMAX);
        imshow("dft magnitud",mag_norm);
    }
    void myimshow2(const Mat& complexImg)
    {
        Mat mag;
        //对复数图像计算幅值
        Mat planes[2];
        split(complexImg,planes);
        magnitude(planes[0],planes[1],mag);
        normalize(mag,mag,1,0,CV_MINMAX);
        imshow("inverce dft magnitud",mag);
    }
    int main()
    {
        //1.读入灰度图像,不要读入彩色图像
        //  Mat img=imread("D:/Qt/MyImage/baboon.jpg",0);
        Mat img=Mat::zeros(300,300,CV_32F);//定义输入图像的实部300×300的0矩阵,
        //单通道。也可以从外部读入一灰度图像。
        //下面一行语句,在图像中央6×6Rect区域赋值为1
        img(Rect(img.cols/2-3,img.rows/2-3,6,6))=Scalar::all(1);
    
        imshow("original image",img);
        //2.将单通道图像转换成双通道图像
        Mat img2;
        img.convertTo(img2,CV_32FC2);
        //3.调用dft函数实现傅里叶变换
        Mat img_dft;
        dft(img2,img_dft,DFT_COMPLEX_OUTPUT);
        //4.显示傅里叶频谱图
        dftshift(img_dft);//傅里叶普的中心化
        myimshow(img_dft);
        //5.调用idft()函数,执行逆傅里叶变换
        Mat iimg;
        idft(img_dft,iimg);
        myimshow2(iimg);
        waitKey();
        return 0;
    }

    运行结果如下,左图是原图像,中间是频谱图,右边是经逆傅里叶变换得到复原图像:

  • 相关阅读:
    Objective-C Runtime Method Swizzling 实践
    code signing blocked mmap() of '/private/var/contai 报错
    supervisor 监控nginx 一直在重启的问题
    Supervisor 两种不同的启动方式,带来两种不同的结果
    addChildViewController后 Childvc viewWillAppear 不调用的问题
    cocoapods 升级到最新beta 版
    addChildViewController后开启热点/wifi/打电话引起的子vc的布局问题
    "undefined method `root' for nil:NilClass" error when using "pod install" 解决办法
    macOS sierra 10.12 Cocoapods 私有库
    Demo
  • 原文地址:https://www.cnblogs.com/phoenixdsg/p/14852452.html
Copyright © 2020-2023  润新知