OpenCV示例学习(七):离散傅里变换(DFT)算子:getOptimalDFTSize(),copyMakeBorder(),magnitude(),log(),normalize()

#include <opencv2/opencv.hpp>using namespace cv;int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//【1】以灰度模式读取原始图像并显示Mat srcImage = imread("F:/C++/2. OPENCV 3.1.0/TEST/2.jpg", 0);if (!srcImage.data) { printf("读取图片错误,请确定目录下是否有imread函数指定图片存在~! \n"); return false; }imshow("原始图像", srcImage);//【2】将输入图像延扩到最佳的尺寸,填充边界(用0)// 返回给定向量尺寸的傅里叶最有尺寸大小 m,nint m = getOptimalDFTSize(srcImage.rows);int n = getOptimalDFTSize(srcImage.cols);//将添加的像素初始化为0.// 扩充图像边界://top +=0;button+=(m - srcImage.rows)//left +=0;right +=(n - srcImage.cols)Mat padded;copyMakeBorder(srcImage, padded, 0, m - srcImage.rows, 0, n - srcImage.cols, BORDER_CONSTANT, Scalar::all(0));//imshow("src",srcImage);//【3】为傅立叶变换的结果(实部和虚部)分配存储空间。// 傅里叶变换的结果是复数,对于每个原图像值,结果会有两个图像值。// 此外,频域范围远远超过空间值范围,因此要将频域储存在 float 格式中。// 多加额外通道储存复数部分。Mat planes[] = { Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F) };Mat complexI;//将planes数组组合合并成一个多通道的数组complexImerge(planes, 2, complexI);//【4】进行就地离散傅里叶变换(输入输出均为同一图像)// 此图像有两个通道,分辨储存dft(complexI, complexI);//【5】将复数转换为幅值M,即// =>M=sqrt(Re(DFT(I))^2 + Im(DFT(I))^2)// 将多通道数组complexI分离成几个单通道数组,// planes[0] = Re(DFT(I), planes[1] = Im(DFT(I))split(complexI, planes);magnitude(planes[0], planes[1], planes[0]);// planes[0] = magnitude//【6】进行对数尺度(logarithmic scale)缩放:// 傅里叶变换幅度值范围大到不适合于屏幕显示(高值白点,低值黑点)// 为了凸显高低值变化的连续性,我们用对数尺度替换线性尺度,即// =>M1=log(1 +M)Mat magnitudeImage = planes[0];magnitudeImage += Scalar::all(1);log(magnitudeImage, magnitudeImage);//求自然对数//【7】剪切和重分布幅度图象限//若有奇数行或奇数列,进行频谱裁剪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));   // ROI区域的左上Mat q1(magnitudeImage, Rect(cx, 0, cx, cy));  // ROI区域的右上Mat q2(magnitudeImage, Rect(0, cy, cx, cy));  // ROI区域的左下Mat q3(magnitudeImage, Rect(cx, cy, cx, cy)); // ROI区域的右下//交换象限(左上与右下进行交换)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, 0, 1, NORM_MINMAX);//【9】显示效果图imshow("频谱幅值", magnitudeImage);waitKey();return a.exec();
}


OpenCV示例学习(七):离散傅里变换(DFT)算子:getOptimalDFTSize(),copyMakeBorder(),magnitude(),log(),normalize()相关推荐

  1. OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse()

    OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse() #include <opencv2/opencv.hpp>usi ...

  2. OpenCV与图像处理学习七——传统图像分割之阈值法(固定阈值、自适应阈值、大津阈值)

    OpenCV与图像处理学习七--传统图像分割之阈值法(固定阈值.自适应阈值.大津阈值) 一.固定阈值图像分割 1.1 直方图双峰法 1.2 OpenCV中的固定阈值分割 二.自动阈值图像分割 2.1 ...

  3. OpenCV 【十七】离散傅立叶变换

    目录 1 key 2 原理 3 实例 3代码 4运行结果 5应用举例 1 key 什么是傅立叶变换及其应用? 如何使用OpenCV提供的傅立叶变换? 相关函数的使用,如: copyMakeBorder ...

  4. OpenCV离散傅立叶变换DFT的实例(附完整代码)

    OpenCV离散傅立叶变换DFT的实例 OpenCV离散傅立叶变换DFT的实例 OpenCV离散傅立叶变换DFT的实例 #include "opencv2/core.hpp" #i ...

  5. 离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习

    离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习 说在前边 最近复习\(DSP\)的时候,发现了一个号称专门针对离散实序列的变换,经分析总运算量为普通\(FFT\)的几乎一半,而且完全没有复数. ...

  6. 数字信号处理学习笔记[0] 连续信号的频谱和傅氏变换

    文章目录 绪论 1 连续信号的频谱和傅氏变换 1.1 有限区间上连续信号的傅氏级数和离散频谱 1.2 傅氏变换,连续信号与频谱 1.2.3 频谱的基本性质 实际应用举例 习题 绪论 Q: 举例说明&q ...

  7. opencv 图像去噪学习总结

    OpenCV图像处理篇之图像平滑 图像平滑算法 程序分析及结果 图像平滑算法 图像平滑与图像模糊是同一概念,主要用于图像的去噪.平滑要使用滤波器,为不改变图像的相位信息, 一般使用线性滤波器,其统一形 ...

  8. OpenCV 图像处理学习手册:1~5

    原文:Learning Image Processing with OpenCV 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 计算机视觉 译文集],采用译后编辑(MT ...

  9. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

最新文章

  1. C#中转义字符[转]
  2. 编程面试题:编写一个会造成数据库死锁的应用
  3. 关于SpringCloud、SpringBoot 希望这是说得最详细的
  4. junit junit_JUnit理论简介
  5. 王小云:连破两套美国顶级密码,获得711万奖励,美国不淡定了
  6. height:calc(100% - 10px)的用法(垂直居中) - 布局篇
  7. c# winform 点击按钮切换tabcontrol标签
  8. 滴滴顺风车回归倒计时!
  9. Java Platform SE 8(Java概念图的描述)中文文档
  10. Linux下的tar命令
  11. 软件测试--移动应用主要针对软测比赛(教程)
  12. opencv4下使用SVM进行简单颜色分类
  13. 如何查看自己的外网 IP 地址
  14. 【Python】PDF转图片
  15. Java 读取Word文本框中的文本/图片/表格
  16. java项目大鱼吃小鱼
  17. Windows10与Ubuntu双系统安装记录
  18. 华为手机如何简单、快捷地投屏到电视机上?
  19. 解决谷歌浏览器:Flash插件初始化失败,请更新您的FlashPlayer版本之后重试!
  20. (c++)五分制成绩(函数实现)

热门文章

  1. python3字节转化字符_捋一捋字符串与字节序列的关系
  2. 训练神经网络时如何确定batch的大小?
  3. 美团深度学习系统的工程实践
  4. 技术动态 | 去中心化知识图谱协作平台建设实践
  5. 论文浅尝 | 用图网络做小样本学习
  6. Android官方开发文档Training系列课程中文版:通知用户之大视图通知
  7. KubeVela 高可扩展的云原生应用平台与核心引擎
  8. ​Nat. Commun.速递:深度学习在计算生物学中的应用综述
  9. Trie可持久化Trie
  10. css3布局篇(双飞翼)