0022-在OpenCV环境下做图像或矩阵的傅里叶变换

傅里叶变换的概念在《高等数学》、《信号与系统》、《数字信号处理》中都有详细的原理说明,网上也有一大堆文章解释其原理。这里我就不多说了,总之它是把信号变换到三角函数系里,实际上是域的变换,至于变换有什么好处,其实就是从另一个角度观察同一个信号。对图像的傅里叶变换实际上是一个二维傅里叶变换。OpenCV提供了函数dft来作傅里叶变换,这个函数的使用方法很简单,大家看了代码便知道怎么用了。
代码如下
代码中用到的图像下载链接:http://pan.baidu.com/s/1kV89yXT 密码:6blt
 

//opencv版本:OpenCV3.0
//VS版本:VS2013
//Author:qxsf321.net

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>    
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>

#include <iostream>

using namespace cv;
using namespace std;

int main()
{
 //这个程序的完整代码请搜索公众号"qxsf321",关注后回复0022即可获取
 //这个程序的完整代码请搜索公众号"qxsf321",关注后回复0022即可获取
 //这个程序的完整代码请搜索公众号"qxsf321",关注后回复0022即可获取

}


代码说明
getOptimalDFTSize函数用于计算图像作傅里叶变换的最佳尺寸,在这种尺寸下,算法计算速度最快。类似的原理大家可以搜索下“FFT”,即快速傅里叶变换。
注意:傅里叶变换的结果为复数,有实部,有虚部,所以需要用二维矩阵存储结果,两个维度分别存储实部和虚部。
copyMakeBorder函数的原型如下
C++: void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value=Scalar() )
参数意义就不介绍了,大家看原型并结合代码就知道怎么用了。
其它要说明的都通过注释写在代码中了

运行结果截图如下

结果说明:频谱图中越亮的部分代表图像的灰度值变化越剧烈。

猜你喜欢

转载自blog.csdn.net/lehuoziyuan/article/details/84101561