图像傅立叶变换以及中心转换函数

这篇博客介绍了使用OpenCV库在Windows环境下进行图像的傅立叶变换和中心转换操作,是作者以前学习图像处理时的实践记录。
摘要由CSDN通过智能技术生成

还是以前学习图像处理的时候写的函数呀!

编程环境:windows下结合opencv库。

//傅里叶频谱的中心转换
//void ShiftDFT(IplImage* src, IplImage* dst);
void ShiftDFT(CvArr* src, CvArr* dst);
//傅里叶变换的频谱图
void DFTP(IplImage* src, IplImage* dst);

//傅里叶频谱的中心转换
/*
原理解释:利用频谱图像的对称性
源频谱左上角部分->目标频谱右下角部分
源频谱左下角部分->目标频谱右上角部分
源频谱右上角部分->目标频谱左下角部分
源频谱右下角部分->目标频谱左上角部分
利用上述转换生成目标中心对称频谱
*/
void ShiftDFT(CvArr* src, CvArr* dst)
{
	if (!src || !dst)
	{
		return;
	}

	int nWidth;
	int nHeight;
	CvMat tmp1;
	CvMat tmp2;
	//src可能会出现指向CvMat与IplImage两种不同类型的指针,故进行判断后分别执行不同的程序
	if (CV_IS_MAT_HDR(src))//src指向CvMat类型指针
	{
		CvMat* pMatSrc = (CvMat*)src;
		nWidth = pMatSrc->width;
		nHeight = pMatSrc->height;

		//可能会出现src与dst相同的情况,这里保存src以便复制时出现问题
		CvMat* pMatSrcTmp = cvCreateMat(nHeight, nWidth, pMatSrc->type);
	    cvCopy(src, pMatSrcTmp);

	    //右下角部分装换
    	cvGetSubRect(src, &tmp1, cvRect(0, 0, nWidth / 2, nHeight / 2));//源图像左上角
    	cvGetSubRect(dst, &tmp2, cvRect(nWidth / 2, nHeight / 2, nWidth / 2, nHeight / 2));目标图像右下角
    	cvCopy(&tmp1, &tmp2);//目标图像右下角设定

    	//右上角部分装换
    	cvGetSubRect(src, &tmp1, cvRect(0, nHeight / 2, nWidth / 2, nHeight / 2));//源图像左下角
    	cvGetSubRect(dst, &tmp2, cvRect(nW
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值