2021-10-22

本文详细介绍了如何在Visual Studio 2019中配置OpenCV 2.4.13环境,并用C语言通过cvDFT进行一维傅里叶变换和逆变换的步骤。包括CvMat的初始化、傅里叶变换计算、幅度和相位计算、傅里叶逆变换的过程。最后展示实验代码和结果。
摘要由CSDN通过智能技术生成

最近在用C代码调用opencv进行一维数据的傅里叶变换以及傅里叶逆变换,但是网上的资料比较分散不全面,因此在这里进行一些总结分享。

一、opencv版本选择

在visual studio 2019中用C代码调用opencv需要进行opencv环境的配置,在选择opencv版本时,需要注意该版本下的C API是否可用,与visual studio 2019是否匹配(vc14,vc15)?经过网上信息查询和实验尝试,最终采用opencv 2.4.13版本进行环境搭建(opencv官网上可下载)。

二、配置opencv(Windows)

(可参照:https://blog.csdn.net/guanzhen3657/article/details/81071359

1. 在Windows 10 中安装opencv

  1. 从官网上下载opencv 的windows版本;
  2. 双击文件将opencv解压到安装路径;
  3. 配置系统环境变量:高级系统设置>>高级>>环境变量,编辑path,添加“xxxxxx\build\x64\vc14\bin”(xxxxxx为opencv安装路径)。

2. 在visual studio 2019中配置opencv

  1. 打开 visual studio 2019,新建项目,右键点击属性进行编辑;
  2. VC++ 目录—>包含目录 中添加
    xxxxxxx\opencv\build\include
    xxxxxxx\opencv\build\include\opencv
    xxxxxxx\opencv\build\include\opencv2
    在这里插入图片描述
  3. VC++ 目录—>库目录 中添加:
    xxxxxxx\opencv\build\x64\vc14\lib
    在这里插入图片描述
  4. 链接器—>输入—>附加依赖库 中添加:
    根据具体需求添加
    opencv_calib3d2413d.lib
    opencv_contrib2413d.lib
    opencv_core2413d.lib
    opencv_features2d2413d.lib
    opencv_flann2413d.lib
    opencv_gpu2413d.lib
    opencv_highgui2413d.lib
    opencv_imgproc2413d.lib
    opencv_legacy2413d.lib
    opencv_ml2413d.lib
    opencv_nonfree2413d.lib
    opencv_objdetect2413d.lib
    opencv_ocl2413d.lib
    opencv_photo2413d.lib
    opencv_stitching2413d.lib
    opencv_superres2413d.lib
    opencv_ts2413d.lib
    opencv_video2413d.lib
    opencv_videostab2413d.lib

3. 测试opencv是否配置成功

  1. 创建.c文件;
  2. 输入以下内容:
#include"opencv2/core/core_c.h"
#include"cv.h"
#include "highgui.h"
int main()
{
   	
	IplImage* img = cvLoadImage("1.jpg",1);
	cvShowImage("Example1", img);
	cvWaitKey(0);
	cvReleaseImage(&img);
	cvDestroyWindow("Example1");
	return 0;
}
  1. 若窗口显示“1.jpg”的图像则说明配置成功。

三、C代码调用 opencv 的 cvDFT进行傅里叶变换和傅里叶逆变换

1. CvMat的初始化和赋值

因为使用opencv的cvDFT需要用到CvMat结构,因此下面会对CvMat的使用进行简单的描述。

(1)方法一

double a[4] = {
    1.1, 2.2,3.3, 4.4 };//数组
CvMat mat = cvMat(1, 4, CV_64F, a);//将cvMat的数值初始化为数组a的数值
double* data = mat.data.db;//data为数据指针
printf("%.4f",data[0]);//输出mat中的第一个数值

注意: db是double,fl是float,i是int, 具体使用哪一种与CvMat的数值类型有关(根据数据需求选择CV_64F等其他数据类型),CvMat 的结构可以在 opencv 的 types_c.h 文件中查看;在查看mat数据或对mat进行赋值时,可以用 data[x] 来对下标为x的数值进行操作。

(2)方法二

double a[4] = {
    1.1, 2.2,3.3, 4.4 };
CvMat* mat = cvCreateMat(1, 4, CV_64F);//定义
cvZero(mat);//初始化为0
double* data = mat->data.db;//指针       
for (int i = 0; i < 4; i++)data[i] = a[i];//赋值

2. 傅里叶变换(DFT)

(1)进行傅里叶变换

int 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值