如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
/*opencv的傅里叶变换及逆变换实现。傅里叶变换需要将数据表示为复数形式,通过一个两通道矩阵来记录复数的实部和虚部,然后通过cvDFT来实现变换。对于图片变换也是一样,只是矩阵换成IplImage格式,用两个单通道图片来分别表示实部和虚部,用两通道图片来存放变换结果。lbd.uestc@gmail.com*/#include<iostream>#include<cv.h>#include<cxcore.h>#include<highgui.h>usingnamespacestd;intmain(intargc,char*argv[]){floatr[]={23,23,214,214,32,53};floati[]={22,32,33,42,31,12};CvMat*re=cvCreateMat(1,6,CV_32FC1);//实部CvMat*im=cvCreateMat(1,6,CV_32FC1);//虚部CvMat*re_dst=cvCreateMat(1,6,CV_32FC1);//变换后实部CvMat*im_dst=cvCreateMat(1,6,CV_32FC1);//变换后虚部CvMat*re_=cvCreateMat(1,6,CV_32FC1);//反变换后实部CvMat*im_=cvCreateMat(1,6,CV_32FC1);//反变换后虚部cvInitMatHeader(re,1,6,CV_32FC1,r);//初始化实部cvInitMatHeader(im,1,6,CV_32FC1,i);//初始化虚部CvMat*sum_src=cvCreateMat(1,6,CV_32FC2);//实部虚部结合体CvMat*sum_dst=cvCreateMat(1,6,CV_32FC2);//变换后实部虚部结合体CvMat*sum_=cvCreateMat(1,6,CV_32FC2);//反变换后实部虚部结合体cout<<"原始数据:"<<endl;cout<<"////////////实部/////////////"<<endl;for(intj=0;j<re->cols;j++){cout<<cvmGet(re,0,j)<<endl;}cout<<"////////////虚部/////////////"<<endl;for(inti=0;i<im->cols;i++){cout<<cvmGet(im,0,i)<<endl;}cvMerge(re,im,0,0,sum_src);cvDFT(sum_src,sum_dst,CV_DXT_FORWARD,0);cvSplit(sum_dst,re_dst,im_dst,0,0);cout<<"////////////实部/////////////"<<endl;for(inta=0;a<re_dst->cols;a++){cout<<cvmGet(re_dst,0,a)<<endl;}cout<<"////////////虚部/////////////"<<endl;for(intb=0;b<im_dst->cols;b++){cout<<cvmGet(im_dst,0,b)<<endl;}cvDFT(sum_dst,sum_,CV_DXT_INV_SCALE,0);cvSplit(sum_,re_,im_,0,0);cout<<endl;cout<<"反变换:"<<endl;cout<<"////////////实部/////////////"<<endl;for(intc=0;c<re_->cols;c++){cout<<cvmGet(re_,0,c)<<endl;}cout<<"////////////虚部/////////////"<<endl;for(intd=0;d<im_->cols;d++){cout<<cvmGet(im_,0,d)<<endl;}}