当前位置: 编程技术>c/c++/嵌入式
C++实现二维图形的傅里叶变换
来源: 互联网 发布时间:2014-10-28
本文导语: 本文实例讲述了C++实现二维图形的傅里叶变换的方法。有一定的借鉴价值。分享给大家供大家参考。 具体代码如下: // Fourier.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "stdio.h" #include "math.h" #in...
本文实例讲述了C++实现二维图形的傅里叶变换的方法。有一定的借鉴价值。分享给大家供大家参考。
具体代码如下:
// Fourier.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "math.h"
#include
#include
#include "cxcore.h"
int main(int argc, char* argv[])
{
IplImage *img;
IplImage *simg;
CvMat *mat_R;
CvMat *mat_I;
CvMat *mat_SRC;
CvMat *mat_Row;
CvMat *mat_Col;
CvMat *dst;
CvMat *dst_R;
CvMat *dst_I;
CvMat *dst_Row;
CvMat *dst_Col;
int i,j,k;
double temp;
int height,width,step,channels;
//载入一幅图片
img=cvLoadImage("c:\1.bmp",0);
//mat_R初始化
mat_R=cvCreateMat(img->height,img->width,CV_64FC1);
//mat_I初始化
mat_I=cvCreateMat(img->height,img->width,CV_64FC1);
//mat_SRC初始化
mat_src=/tech-cpp/cvCreateMat/index.html(img->height,img->width,CV_64FC2);
//将图片数据存入mat_R(实部)
cvConvert(img,mat_R);
//将虚部初始化为零
cvZero(mat_I);
//合并实部、虚部
cvMerge(mat_R,mat_I,NULL,NULL,mat_SRC);
//创建双通道double类型数组
dst=cvCreateMat(img->height,img->width,CV_64FC2);
dst_R=cvCreateMat(img->height,img->width,CV_64FC1);
dst_I=cvCreateMat(img->height,img->width,CV_64FC1);
//为循环变量赋值
height=img->height;
width=img->width;
channels=2;
step=channels*width;
//局部变量,值为正一或负一
int check;
//将输入数据乘以(-1)^(i+j),用于中心化
for(j=0;jdata.db[j*step+i*channels+k];
}
}
}
//创建一个mat用于临时存储一行数据
CvMat mat_Header=cvMat(4,4,CV_64FC2);
mat_Row=cvCreateMat(1,width,CV_64FC2);
mat_Col=cvCreateMat(1,height,CV_64FC2);
//创建一个dst用于临时存储一行数据
dst_Row=cvCreateMat(1,width,CV_64FC2);
dst_Col=cvCreateMat(height,1,CV_64FC2);
//为循环变量赋值
height=img->height;
width=img->width;
channels=2;
step=channels*width;
//行的傅里叶变换
for(j=0;jdata.ptr;
//创建一张用于显示的图像
simg=cvCreateImage(cvGetSize(img),8,1);
//为循环变量赋值
height=simg->height;
width=simg->width;
channels=1;
step=channels*width;
for(j=0;j