zoukankan      html  css  js  c++  java
  • opencv3.2.0图像离散傅里叶变换

    源码:

    ##名称:离散傅里叶变换
    ##平台:QT5.7.1+opencv3.2.0
    ##日期:2017年12月13、
    
    /**** 新建QT控制台程序****/
    
    #include <QCoreApplication>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <iostream>
    using namespace std;
    using namespace cv;
    
    int main()
    {
        //读入原始图像
       Mat srcImage = imread("/home/ttwang/Valley_logo.jpg",0);
       imshow("srcImage",srcImage);
    
        /****将图像扩大到合适尺寸********/
       int m = getOptimalDFTSize(srcImage.rows);
       int n = getOptimalDFTSize(srcImage.cols);
       Mat padded;
       copyMakeBorder(srcImage,padded,0,m-srcImage.rows,0,n-srcImage.cols,BORDER_CONSTANT,
                      Scalar::all(0));
    
       /******为傅里叶变换的结果(实部和虚部)分配存储空间******/
       Mat planes[] = {Mat_<float>(padded),Mat::zeros(padded.size(),CV_32F)};
       Mat complexI;
       merge(planes,2,complexI);
    
       /********进行傅里叶变换*********/
       dft(complexI,complexI);
    
       /*********将复数转化为幅值***********/
       split(complexI,planes);
       magnitude(planes[0],planes[1],planes[0]);
       Mat magnitudeImage = planes[0];
    
       /**********进行对数尺度**********/
       magnitudeImage += Scalar::all(1);
       log(magnitudeImage,magnitudeImage);
    
       /*******剪切和重分布幅度图象限 ******/
       magnitudeImage = magnitudeImage(Rect(0,0,magnitudeImage.cols & -2,magnitudeImage.rows & -2));
       int cx = magnitudeImage.cols / 2;
       int cy = magnitudeImage.rows /2;
       Mat q0(magnitudeImage,Rect(0,0,cx,cy));
       Mat q1(magnitudeImage,Rect(cx,0,cx,cy));
       Mat q2(magnitudeImage,Rect(0,cy,cx,cy));
       Mat q3(magnitudeImage,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);
    
       /********归一化********/
       normalize(magnitudeImage,magnitudeImage,0,1,NORM_MINMAX);
    
       /******显示效果图******/
       imshow("magnitudeImage",magnitudeImage);
    
       waitKey(0);
       return 0;
    }

     运行结果:                                                                    

                            

                                 效果图                                                                                              原图

  • 相关阅读:
    疫情之下,在家办公靠谱吗?
    假期延长,我们决定送2套测试提升课程给大家充实一下自己
    webdriver的常用方法
    selenium控制浏览器操作方法
    第一个webdriver程序
    selenium元素定位
    启动浏览器
    生成HTML测试报告表格
    pycham设置头文件内容
    Git的指令
  • 原文地址:https://www.cnblogs.com/ilym/p/8034856.html
Copyright © 2011-2022 走看看