热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Openc++傅里叶变化

---------------------------------【头文件、命名空间包含部分】-----------------------------描述:包

//---------------------------------【头文件、命名空间包含部分】-----------------------------
// 描述:包含程序所使用的头文件和命名空间
//-------------------------------------------------------------------------------------------------
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include
using namespace cv;
using namespace std;//--------------------------------------【main( )函数】-----------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始执行
//-------------------------------------------------------------------------------------------------
int main( )
{//【1】以灰度模式读取原始图像并显示Mat srcImage &#61; imread("/home/arthur/Documents/Project/OpenCVProject/cvdemo/11.tif", 0);if(!srcImage.data ) { printf("读取图片错误&#xff0c;请确定目录下是否有imread函数指定图片存在~&#xff01; \n"); return false; }imshow("原始图像" , srcImage);//【2】将输入图像延扩到最佳的尺寸&#xff0c;边界用0补充int m &#61; getOptimalDFTSize( srcImage.rows );int n &#61; getOptimalDFTSize( srcImage.cols );//将添加的像素初始化为0.Mat padded;copyMakeBorder(srcImage, padded, 0, m - srcImage.rows, 0, n - srcImage.cols, BORDER_CONSTANT, Scalar::all(0));cout <<"srcSize:" <(padded), Mat::zeros(padded.size(), CV_32F)};Mat complexI;merge(planes, 2, complexI);//【4】进行就地离散傅里叶变换dft(complexI, complexI);cout < log(1 &#43; sqrt(Re(DFT(I))^2 &#43; Im(DFT(I))^2))split(complexI, planes); // 将多通道数组complexI分离成几个单通道数组&#xff0c;planes[0] &#61; Re(DFT(I)), planes[1] &#61; Im(DFT(I))magnitude(planes[0], planes[1], planes[0]);// planes[0] &#61; magnitude计算二维矢量的幅值Mat magnitudeImage &#61; planes[0];//【6】进行对数尺度(logarithmic scale)缩放magnitudeImage &#43;&#61; Scalar::all(1);imshow("beforelog",magnitudeImage);log(magnitudeImage, magnitudeImage);//求自然对数normalize(magnitudeImage, magnitudeImage, 0, 1, NORM_MINMAX);imshow("afterlognor", magnitudeImage);//【7】剪切和重分布幅度图象限//若有奇数行或奇数列&#xff0c;进行频谱裁剪magnitudeImage &#61; magnitudeImage(Rect(0, 0, magnitudeImage.cols & -2, magnitudeImage.rows & -2));//重新排列傅立叶图像中的象限&#xff0c;使得原点位于图像中心int cx &#61; magnitudeImage.cols/2;int cy &#61; 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区域的右下//交换象限&#xff08;左上与右下进行交换&#xff09;Mat tmp;q0.copyTo(tmp);q3.copyTo(q0);tmp.copyTo(q3);//交换象限&#xff08;右上与左下进行交换&#xff09;q1.copyTo(tmp);q2.copyTo(q1);tmp.copyTo(q2);//【8】归一化&#xff0c;用0到1之间的浮点值将矩阵变换为可视的图像格式//此句代码的OpenCV2版为&#xff1a;//normalize(magnitudeImage, magnitudeImage, 0, 1, CV_MINMAX);//此句代码的OpenCV3版为:normalize(magnitudeImage, magnitudeImage, 0, 1, NORM_MINMAX);//【9】显示效果图imshow("频谱幅值", magnitudeImage);waitKey();return 0;
}

 


推荐阅读
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
author-avatar
阳光下微醺的我
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有