当前位置: 编程技术>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