尽管离第一次接触傅立叶变换已经好几年了,但是至今还是不理解,想想数学课和小波课都白上了。今天又重温傅立叶变换,又写了代码。
我的习惯先上代码,再讲原理:
代码:
#include <opencv/cv.h>
#include <opencv2/contrib/contrib.hpp>
#include <opencv/highgui.h>
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace cv;
int main(int argc,char** argv)
{
Mat img = imread("D:\\1.jpg");//原图为彩图
Mat gray_img(img.size(),CV_32F);//
if(img.empty())
{
return false;
}
if(img.channels()!=1)
{
cvtColor(img,gray_img,CV_BGR2GRAY);//将原图转换为灰度图
}
Mat expanded;
int height = getOptimalDFTSize(gray_img.rows);//DFT变换找到最合适的图像的长宽,下面会介绍原理
int width = getOptimalDFTSize(gray_img.cols);
expanded.create(height,width,CV_32F);
copyMakeBor