示例代码:

#include <opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
// 1. 以灰度模式读取原始图并显示
Mat srcImage = imread("005.jpg", );
if (!srcImage.data){ printf("input image error ! \n"); return false; }
imshow("原始图", srcImage);
// 2. 将输入图像延展到最佳的尺寸,边界有0填充;
int m = getOptimalDFTSize(srcImage.rows);
int n = getOptimalDFTSize(srcImage.cols); // 以上两个是获得src图像的最佳DFT尺寸
// 将添加的像素初始化为0;
Mat padded;
copyMakeBorder(srcImage, padded, , m - srcImage.rows, , n - srcImage.cols, BORDER_CONSTANT, Scalar::all());
// 3. 为傅里叶变化的结果(实部和虚部)分配储存空间
// 将planes数组组合合并成一个多通道的数组complexI
Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) };
Mat complexI;
merge(planes, , complexI);
// 4. 进行就地离散傅里叶变换
dft(complexI, complexI);
// 5. 将复数转换为幅值,即log (1+sqrt(Re(DFT(I)^2+IM(DFT(I)^2))
split(complexI, planes); // 多通道分离成几个单通道数组 [0] =Re.. [1] = Im..
magnitude(planes[], planes[], planes[]);
Mat magnitudeImage = planes[];
// 6. 进行尺度log 缩放
magnitudeImage += Scalar::all();
log(magnitudeImage, magnitudeImage); // 求自然对数
// 7. 剪切和重分布幅度象限
// 若有奇数行或者列,进行频谱裁剪
magnitudeImage = magnitudeImage(Rect(, , magnitudeImage.cols&-, magnitudeImage.rows&-));
// 重新排列傅里叶图像中的象限,使得原点位于图像中心
int cx = magnitudeImage.cols / ;
int cy = magnitudeImage.rows / ;
Mat q0(magnitudeImage, Rect(, , cx, cy));
Mat q1(magnitudeImage, Rect(cx, , cx, cy));
Mat q2(magnitudeImage, Rect(, 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);
// 8. 归一化 用0到1之间的浮点值将矩阵变换为可是的图像格式
normalize(magnitudeImage, magnitudeImage, , , NORM_MINMAX);
// 9. 显示效果
imshow("频谱幅值", magnitudeImage);
waitKey(); return ;
}

  

opencv:傅里叶变换的更多相关文章

  1. C++ Opencv 傅里叶变换的代码实现及关键函数详解

    一.前言 最近几天接触了图像的傅里叶变换,数学原理依旧不是很懂,因此不敢在这里妄言.下午用Opencv代码实现了这一变换,有一些经验心得,愿与大家分享. 二.关键函数解析 2.1copyMakeBor ...

  2. lll

    //// whywhy unsigned int T = 1; ~T = 4294967294; T = 2;~T= 4294967293 ;T = 0;~T=4294967295; int T = ...

  3. OpenCV基于傅里叶变换进行文本的旋转校正

    傅里叶变换可以用于将图像从时域转换到频域,对于分行的文本,其频率谱上一定会有一定的特征,当图像旋转时,其频谱也会同步旋转,因此找出这个特征的倾角,就可以将图像旋转校正回去. 先来对原始图像进行一下傅里 ...

  4. Opencv 实现图像的离散傅里叶变换(DFT)、卷积运算(相关滤波)

    我是做Tracking 的,对于速度要求非常高.发现傅里叶变换能够使用. 于是学习之. 核心: 最根本的一点就是将时域内的信号转移到频域里面.这样时域里的卷积能够转换为频域内的乘积! 在分析图像信号的 ...

  5. Python下opencv使用笔记(十)(图像频域滤波与傅里叶变换)

    前面以前介绍过空间域滤波,空间域滤波就是用各种模板直接与图像进行卷积运算,实现对图像的处理,这个方案直接对图像空间操作,操作简单.所以也是空间域滤波. 频域滤波说究竟终于可能是和空间域滤波实现相同的功 ...

  6. opencv 3 core组件进阶(3 离散傅里叶变换;输入输出XML和YAML文件)

    离散傅里叶变换 #include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc.hpp" ...

  7. OpenCV.Net基于傅里叶变换进行文本的旋转校正

    本文描述一种利用OpenCV及傅里叶变换识别图片中文本旋转角度并自动校正的方法,由于对C#比较熟,因此本文将使用OpenCVSharp. 文章参考了http://johnhany.net/2013/1 ...

  8. Python下opencv使用笔记(图像频域滤波与傅里叶变换)

    Python下opencv使用笔记(图像频域滤波与傅里叶变换) 转载一只程序喵 最后发布于2018-04-06 19:07:26 阅读数 1654  收藏 展开 本文转载自  https://blog ...

  9. Opencv笔记(二十一)——傅里叶变换

    参考 Numpy 中的傅里叶变换 首先我们看看如何使用 Numpy 进行傅里叶变换.Numpy 中的 FFT 包可以帮助我们实现快速傅里叶变换.函数 np.fft.fft2() 可以对信号进行频率转换 ...

随机推荐

  1. 常见面试题整理--Python概念篇

    希望此文可以长期更新并作为一篇Python的面试宝典.每一道题目都附有详细解答,以及更加详细的回答链接.此篇是概念篇,下一篇会更新面试题代码篇. (一).这两个参数是什么意思:*args,**kwar ...

  2. 我的Android进阶之旅------>Android颜色值(#AARRGGBB)透明度百分比和十六进制对应关系以及计算方法

    我的Android进阶之旅-->Android颜色值(RGB)所支持的四种常见形式 透明度百分比和十六进制对应关系表格 透明度 十六进制 100% FF 99% FC 98% FA 97% F7 ...

  3. 003-mysql查询表的数据大小

    在需要备份数据库里面的数据时,我们需要知道数据库占用了多少磁盘大小,可以通过一些sql语句查询到整个数据库的容量,也可以单独查看表所占容量. 1.查看数据库表结构大小,要查询表所占的容量,就是把表的数 ...

  4. 你真的会用Gson吗?Gson使用指南

    你真的会用Gson吗?Gson使用指南(一) 你真的会用Gson吗?Gson使用指南(二) 你真的会用Gson吗?Gson使用指南(三) 你真的会用Gson吗?Gson使用指南(四)

  5. Web Service简单demo

    最近开发因需求要求需要提供Web Service接口供外部调用,由于之前没有研究过该技术,故查阅资料研究了一番,所以写下来记录一下,方便后续使用. 这个demo采用CXF框架进行开发,后续所提到的We ...

  6. Java io流详解一

    原文地址http://www.cnblogs.com/xdp-gacl/p/3634409.html java基础学习总结——流 一.JAVA流式输入/输出原理

  7. mysql增量恢复的一个实例操作

    通过防火墙禁止web等应用向主库写数据或者锁表,让主库暂时停止更新,然后进行恢复 模拟整个场景 1.登录数据库 [root@promote 3306]# mysql -uroot -S /data/3 ...

  8. PHP HTML DOM 解析器 中文手册

    简单的PHP HTML DOM 解析器 中文手册 | PHP Simple HTML DOM Parser中文手册 目录 快速入门 如何创建HTML DOM 对象? 如何查找HTML元素? 如何访问H ...

  9. Python框架之Tornado (源码之褪去模板外衣)

    上一篇介绍了客户端请求在tornado框架中的生命周期,其本质就是利用epoll和socket来获取并处理请求.在上一篇的内容中,我们只是给客户端返回了简单的字符串,如:“Hello World”,而 ...

  10. js小技巧(收集的)

    一.事件源对象 event.srcElement.tagName //IE浏览器 event.srcElement.type event.target.tagName //dom浏览器 event.t ...