【OpenCV】OpenCV实战从入门到精通之 -- 离散傅里叶变换相关函数详解

2023-10-29

目录

1、dft()函数

2、返回DFT最优尺寸大小:getOptimalDFTSize()函数

3、扩充图像边界:copyMakeBorder()函数

4、计算二维矢量的幅值:magnitude()函数

6、矩阵归一化:normalize()函数


1、dft()函数

dift函数的作用是对一维或二维浮点数数组进行正向或反向离散傅里叶变换

函数格式:

void dift(InputArray src, OutputArray dst, int flags=0, int nonzeroRows=0)

参数说明:

第一个参数,InputArray src,输入矩阵,可以为实数或者虚数

第二个参数,OutputArray dst,函数调用后的结果存储在这里,其尺寸和类型取决于标识符,即第三个参数flags

第三个参数,int flags,转换的标识符,有默认值0,取值可以为表6.1中标识符的结合

第四个参数,int nonzeroRows,默认值0。当此参数设为非零时(最好是取值为想要处理的那一行的值,比如C.rows),函数会假设只有输入矩阵的第一个非零行包含非零元素(没有设置DFT_INVERSE标识符),或只有输出矩阵的第一个非零行包含非零元素(设置了DFT_INVERSE标识符)。这样函数就可以对其他进行高效的处理,以节省时间开销。


2、返回DFT最优尺寸大小:getOptimalDFTSize()函数

getOptimalDFTSize()函数返回给定向量尺寸的傅里叶最优尺寸大小。因为当图像的尺寸是2、3、5的倍数时,计算速度最快。因此为了提高离散傅里叶变换的运行速度,需要扩充图像,具体扩充多少由此函数计算。

函数格式:

int getOptimalDFTSize(int vecsize)

参数说明:

int vecsize,向量尺寸,即图片的rows、cols


3、扩充图像边界:copyMakeBorder()函数

copyMakeBorder()函数能够扩充图像边界

函数格式:

void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, 
                    int right, int borderType, const Scalar& Value=Scalar())

参数说明:

第一个参数,InputArray src,输入矩阵,即源图像,填Mat类的对象即可

第二个参数,OutputArray dst,函数调用后的结果存储在这里,需要和源图像有一样的尺寸和类型,且size应该为Size(src.cols+left+right, src.rows+top+bottom)

接下来的4个参数分别为int top,int bottom,int left,int right,分别表示在源图像上各扩充多少个像素,如top=2,bottom=2,left=2,right=2表示在源图像上的上下左右各扩充两个像素宽度的边界。

第七个参数,borderType,边界类型,常见取值为BORDER_CONSTANT

第八个参数,const Scalar& value,有默认值Scalar(),可以理解为默认值为0。当borderType取值为BORDER_CONSTANT这个参数表示边界值。 


4、计算二维矢量的幅值:magnitude()函数

magnitude()函数用于计算二维矢量的幅值。

函数格式:

void magnitude(InputArray x, InputArray y, OutputArray magnitude)

参数说明:

第一个参数,InputArray x,表示矢量的浮点型X坐标值,即实部

第二个参数,InputArray y,表示矢量的浮点型Y坐标值,即虚部

第三个参数,OutputArray magnitude,输出幅度值,和第一个参数x有着一样的尺寸和类型

magnitude()函数原理:

                                                                          dst(I)=\sqrt{x(I)^{2}+y(I)^{2}}


5、计算自然对数:log()函数

傅里叶变换的幅度范围大道不适合在屏幕上显示。高值在屏幕上显示为白点,低值为黑点,高低值的变化无法有效分辨。为了在屏幕上凸显出高低变化的连续性,可以用对数尺度类替换线性尺度,公式如下:

                                                                                  M_{1}=log(1+M)

log()函数的功能是计算每个数组元素绝对值的自然对数

函数格式:

void log(InputArray src, OutputArray dst)

参数说明:

第一个参数,InputArray src,输入图像

第二个参数,OutputArray dst,输出图像,得到的绝对值

log()函数原理如下:

                                                                \texttt{dst} (I) =  \fork{\log |\texttt{src}(I)|}{if $\texttt{src}(I) \ne 0$ }{\texttt{C}}{otherwise}

C是一个很大的负数


6、矩阵归一化:normalize()函数

函数格式:

void normalize(InputArray src, OutputArraydst, double alpha=1, double beta=0, int norm_type=NORM_L2, 
               int dtype=-1,InputArray mask=noArray() )

参数说明:

第一个参数,InputArray src,输入矩阵,即源图像,填Mat类的对象即可

第二个参数,OutputArray dst,函数调用后的结果存储在这里,需要和源图像有一样的尺寸和类型

第三个参数,double alpha,规划后的最大值,有默认值1

第四个参数,double beta,规划后的最小值,有默认值0

第五个参数,int norm_type,归一化类型,有NORM_INF, NORM_L1,  NORM_L2和NORM_MINMAX可选,默认值NORM_L2

第六个参数,int dtype,默认值-1。负值时,输出矩阵与src同样类型,否则它和src有同样通道数,且图像深度为CV_MAT_DEPTH(dtype)

第七个参数,InputArray mask,可选的操作掩膜,默认值noArray()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【OpenCV】OpenCV实战从入门到精通之 -- 离散傅里叶变换相关函数详解 的相关文章

  • 刷脸支付始于支付不止于支付

    始于支付 不止于支付 支付宝和微信的战争早已延伸至城市生活的方方面面 让办事不再复杂 今年6月 中国政务服务平台同时在支付宝和微信上线 用户可在线办理查询 缴费 申领证件 投诉等200多项政务服务 还与时俱进地上线了高考分数查询 垃圾分类指
  • C语言的三子棋,也就是井字棋。

    三子棋 程序员入门必须写的东西 包含了C语言初级阶段所有的知识点 比如 do while 循环 while循环 for循环 if else语句 switch语句 二维数组 函数等等 如果要写出三子棋 这些知识点必不可少 三子棋可以分成五步
  • 【QT】——多线程的使用

    目录 基本概念 1 线程类QThread 1 1信号和槽 1 2静态函数 1 3 任务处理函数 2 实例 第一种方式 第二种方式 基本概念 默认的线程在Qt中称之为窗口线程 也叫主线程 负责窗口事件处理或者窗口控件数据的更新 子线程负责后台
  • 阿里云8888端口设置安全组,宝塔控制台显示链接失败

    问题 阿里云8888端口设置安全组 宝塔控制台显示链接失败 解决思路 在服务器ssh执行 etc init d bt restart 重启宝塔服务 刷新页面以能正常访问
  • CephFS 介绍及使用经验分享

    目录 Ceph架构介绍 NFS介绍 分布式文件系统比较 CephFS介绍 MDS介绍 5 1 单活MDS介绍 5 2 单活MDS高可用 CephFS遇到的部分问题 6 1 客户端缓存问题 6 2 务端缓存不释放 6 3 客户端夯住或者慢查询
  • Socket 中级篇(一)Socket断开后要自动重连的常用几种方法:Connected、心跳包、recv()返回值==-1等等。

    第一章 简介 抛出问题 参考 https www cnblogs com youxin p 4056041 html 功能方面比较简单就是client端与server端建立连接 然后发送消息给server 我在server端会使用专门的线程
  • OLED透明屏安装指南:准备工作、步骤和注意事项

    随着科技的不断发展 OLED透明屏作为一种新型的显示技术 逐渐得到了广泛的应用 OLED透明屏具有高透明度 高亮度和广视角等优势 可以实现透明显示效果 为商业展示 户外广告等领域提供了更广阔的空间 然而 正确的安装方法对于保证OLED透明屏
  • 自动火焰识别项目总结

    步骤分为图像获取 gt 图像预处理 gt 火焰图像分割 gt 火焰图像特征提取 gt 火焰识别 1 图像获取 视频或图片 2 图像预处理 预处理过程一般有数字化 几何变换 归一化 平滑 复原和增强等步骤 图像变换 图像增强 图像去噪 图像压
  • java实现文件下载功能

    目录 单个下载 流 1 设置响应类型和头信息 2 实现文件输出 单个下载 本地文件 1 文件读取 2 设置响应类型和头信息 3 实现文件输出 单个下载 网络文件 1 与服务器建立连接 2 设置响应类型和头信息 3 实现文件输出 压缩ZIP下
  • 第十二届蓝桥杯大赛模拟赛(网上最后一题题解大部分是错的)

    第十题 问题描述 小蓝在一个 n 行 m 列的方格图中玩一个游戏 开始时 小蓝站在方格图的左上角 即第 1 行第 1 列 小蓝可以在方格图上走动 走动时 如果当前在第 r 行第 c 列 他不能走到行号比 r 小的行 也不能走到列号比 c 小

随机推荐

  • 2020年,为什么你该学PHP?!!

    1676对于编程初学者来说一个开发顺手的代码编辑器很重要 可大多数人不了解代码编辑器有哪些 网上有很多种代码编辑器推荐 但是不知道这些代码编辑器哪个好用 所以 今天php中文网就为初学者推荐2020最好用的8个代码编辑器 代码编辑器排行榜
  • 聚类算法——KMeans算法(机器学习)

    KMeans算法 一 输入参数 n clusters 数据集将被划分成 n clusters个 簇 即k值以及 int optional default 8 一般需要选取多个k值进行运算 并用评估标准判断所选k值的好坏 以获得较好的聚类效果
  • 基于消息中间件解决分布式事务的开源框架Myth

    基于消息中间件的解决分布式事务框架 https github com yu199195 myth 1 rpc框架支持 dubbo motan springcloud 2 消息中间件支持 jms activimq amqp rabbitmq
  • uboot启动——lowlevel_init函数详解

    1 将lr寄存器中的值压栈 push lr lr寄存器保存的是函数返回地址 每个模式下只有一个lr寄存器 如果涉及多重函数调用 则lr寄存器会被覆盖 导致返回地址丢失 在之前已经初始化栈 所以这里可以将lr寄存器压栈 将来函数返回的时候再弹
  • 【网络】初识网络

    Linux初识网络 文章目录 Linux初识网络 网络 协议 协议分层 OSI七层模型 TCP IP五层 四层 模型 网络传输基本流程 数据包封装和分用 网络中的地址管理 IP地址 MAC地址 网络 协议 协议 是一种约定 计算机之间的传输
  • 基于YOLOv3算法的交通标志识别系统实现流程(个人学习笔记,仅当参考!!)

    总流程 安装darknet 本文利用linux操作系统上安装的Darknet开源轻型深度学习框架 为了提高训练速度利用CUDA和OPENCV 进行编译 完成对YOLO v3算法LISA数据集中四类不同的交通标志的训练及测试 实现对视频中运动
  • C#开发环境准备

    开发准备 1 安装visual studio code vscode 2 然后vscode的插件库安装 C Dev Kit 该插件会自动安装 C extension 和 IntelliCode for C Dev Kit 该插件需要安装 N
  • BeautifulSoup库的基本使用

    BeautifulSoup库的基本使用 1 库的基本使用 1 1 安装库 1 2 导入库 1 3 不同文件操作 2 获取html结构化数据 3 节点操作 3 1 获取子节点 3 2 获取节点内容 3 2 1 单个内容 3 2 2 多个内容
  • 华为OD机试真题 Java 实现【最多几个直角三角形】【2023Q1 100分】

    一 题目描述 有 N 条线段 长度分别为 a 1 a n 现要求你计算这 N 条线段最多可以组合成几个直角三角形 每条线段只能使用一次 每个三角形包含三条线段 二 输入描述 第一行输入一个正整数 T 1 lt T lt 100 表示有组测试
  • 多线程实现一分钟插入1000万条数据

    首先我们需要建立一个线程类 继承Thread类 并实现run方法 1 获取数据库连接 2 编写插入的sql语句 3 关闭自动提交 conn setAutoCommit false 4 编写for循环 跟着那个的插入方法一样 5 将注入的信息
  • L1-025 正整数A+B(java)

    1 题目详情 题的目标很简单 就是求两个正整数A和B的和 其中A和B都在区间 1 1000 稍微有点麻烦的是 输入并不保证是两个正整数 输入格式 输入在一行给出A和B 其间以空格分开 问题是A和B不一定是满足要求的正整数 有时候可能是超出范
  • 历史辩证唯物主义下的金融业发展的思考*

    历史辩证唯物主义下的金融业发展的思考 摘要 从历史唯物主义的角度来 金融是人类生产力发展到一定阶段的产物 金为黄金 融意味着分开流通之意 金融不是纯主观知识体系 而是基于客观经济规律的产物 是在不断的金融创新和协调金融风险的矛盾中逐渐完善
  • YOLOv5区域入侵检测【附完整代码以及视频演示】

    一 前期准备 首先你需要有一份yolov5的官方源码 并且能够找到其中的detect py文件即可 在检测过程中 有些项目不需要我们检测所有的区域 比如禁止区域的入侵检测 只需要检测制定规划出来的区域就可以 例如下图所示这样 在网上随便找的
  • 【word】使用VBA代码,自定义页面数拆分大Word文件为多个小文档并指定名称保存

    使用VBA代码 自定义页面数拆分大Word文件为多个小文档并指定名称保存 alt F11打开开发选项 gt 选择 插入 gt 模块 gt 弹出代码编辑窗口 插入下面代码 按照需要修改页数和要重命名的每个文档按顺序的名字 gt 按F5运行代码
  • 利用Qt Assistant 定制帮助文档

    为了将Qt Assistant定制为自己应用程序的帮助文档浏览器 需要完成以下几步 一 导入HTML格式的帮助文档 1 首先 针对自己的应用程序创建HTML格式的帮助文档 请参见 Doxygen生成HTML文件 下面示例假设HTML文件已经
  • 迷你世界物品查询代码lua

    迷你世界物品查询 local A local B local n 0 local s 0 local function add2 for j 1 500 do 等待1秒 threadpool wait 2 i n 1 500 j local
  • 刷脸支付数据积累价值将超越支付服务本身

    产业生态圈的角度来看 支付服务和在此基础之上所延伸出的产业支付生态 未来都将成为各个生态圈的基础设施 未来 随着产业数字化转型深入 某一场景下的终端客户 内部经营管理 上下游供应商等要逐步实现在线化 在这一过程中 产业各方参与者需要链接 支
  • 关于Unity启动时间过长(启动黑屏时间长)的问题

    好吧 Unity启动确实比其他引擎生成的游戏包慢些 关键是你启动的时候还要等上一段时间才显示Splash那个logo图 最近项目有个蛋疼得需求 需要在启动界面加进度帧动画 我也是醉了 刚开始的思路 用Unity单独做个启动场景 让Splas
  • R语言找不到文件或目录:无法打开文件

    R语言找不到文件或目录 无法打开文件 在R语言中 有时候你可能会遇到一个常见的错误消息 无法打开文件 No such file or directory 找不到文件或目录 这个错误消息通常表示你尝试在R环境中读取或写入一个不存在的文件或目录
  • 【OpenCV】OpenCV实战从入门到精通之 -- 离散傅里叶变换相关函数详解

    目录 1 dft 函数 2 返回DFT最优尺寸大小 getOptimalDFTSize 函数 3 扩充图像边界 copyMakeBorder 函数 4 计算二维矢量的幅值 magnitude 函数 6 矩阵归一化 normalize 函数