作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

函数原型

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

参数说明

  1. InputArray类型的x,表示矢量的浮点型X坐标值,也表示复数中的实部。
  2. InputArray类型的y,表示矢量的浮点型Y坐标值,也表示复数中的虚部。
  3. OutputArray类型的magnitude,输出的幅值,同第一个参数x有着同样的尺寸和类型。

计算公式为:

测试代码

#include<iostream>
#include<opencv2/opencv.hpp>
#include<ctime>
using namespace std;
using namespace cv;void fftshift(cv::Mat &plane0, cv::Mat &plane1);int main(void)
{Mat test = imread("test.jpg", 0);test.convertTo(test, CV_32FC1);//创建通道,存储dft后的实部与虚部(CV_32F,必须为单通道数)cv::Mat plane[] = { test.clone(), cv::Mat::zeros(test.size() , CV_32FC1) };cv::Mat complexIm;cv::merge(plane, 2, complexIm); // 合并通道 (把两个矩阵合并为一个2通道的Mat类容器)cv::dft(complexIm, complexIm, 0); // 进行傅立叶变换,结果保存在自身// 分离通道(数组分离)cv::split(complexIm, plane);// 以下的操作是频域迁移fftshift(plane[0], plane[1]);// 计算幅值cv::Mat mag,mag_log,mag_nor;cv::magnitude(plane[0], plane[1], mag);// 幅值对数化:log(1+m),便于观察频谱信息mag += Scalar::all(1);cv::log(mag, mag_log);cv::normalize(mag_log, mag_nor, 1,0, NORM_MINMAX);cv::Mat BLUR;// 再次搬移回来进行逆变换fftshift(plane[0], plane[1]);cv::merge(plane, 2, BLUR); // 实部与虚部合并cv::idft(BLUR, BLUR);       // idft结果也为复数BLUR = BLUR / BLUR.rows / BLUR.cols;cv::split(BLUR, plane);//分离通道,主要获取通道imshow("original", test / 255);imshow("result", plane[0] / 255);waitKey(0);system("pause");return 0;
}// fft变换后进行频谱搬移
void fftshift(cv::Mat &plane0, cv::Mat &plane1)
{// 以下的操作是移动图像  (零频移到中心)int cx = plane0.cols / 2;int cy = plane0.rows / 2;cv::Mat part1_r(plane0, cv::Rect(0, 0, cx, cy));  // 元素坐标表示为(cx, cy)cv::Mat part2_r(plane0, cv::Rect(cx, 0, cx, cy));cv::Mat part3_r(plane0, cv::Rect(0, cy, cx, cy));cv::Mat part4_r(plane0, cv::Rect(cx, cy, cx, cy));cv::Mat temp;part1_r.copyTo(temp);  //左上与右下交换位置(实部)part4_r.copyTo(part1_r);temp.copyTo(part4_r);part2_r.copyTo(temp);  //右上与左下交换位置(实部)part3_r.copyTo(part2_r);temp.copyTo(part3_r);cv::Mat part1_i(plane1, cv::Rect(0, 0, cx, cy));  //元素坐标(cx,cy)cv::Mat part2_i(plane1, cv::Rect(cx, 0, cx, cy));cv::Mat part3_i(plane1, cv::Rect(0, cy, cx, cy));cv::Mat part4_i(plane1, cv::Rect(cx, cy, cx, cy));part1_i.copyTo(temp);  //左上与右下交换位置(虚部)part4_i.copyTo(part1_i);temp.copyTo(part4_i);part2_i.copyTo(temp);  //右上与左下交换位置(虚部)part3_i.copyTo(part2_i);temp.copyTo(part3_i);
}

测试效果

图1 某点实部

图2 某点虚部

图3 该点幅值

从图像中对应的数值来看,同计算公式一致,当需要对两个数组进行平方和开根号操作时,也可以直接调用该函数~

如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

OpenCV-计算二维矢量幅值cv::magnitude相关推荐

  1. opencv 计算二维矢量的幅值—magnitude()函数

    计算二维矢量的幅值:magnitude()函数 该函数用来计算二维矢量的幅值 void magnitude(InputArray x,InputArray y,OutputArray magnitud ...

  2. 使用Python,Opencv进行二维直方图的计算及绘制

    使用Python,Opencv进行二维直方图的计算及绘制 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python,Opencv进行二维直方图的计算及绘制(分别用Opencv和Numpy计算 ...

  3. matlab 平面 偶极子 声场,二维矢量声强的误差分析

    摘 要:为便于识别和定位平面内噪声源,依据双传声器互谱声强法原理,建立二维矢量声强探头的物理模型,推导了二维声强的计算公式,分别在单极子和偶极子声场条件下,利用该探头测量二维声强及定位误差.结果表明: ...

  4. 矢量切片_数据粒度均衡的二维矢量瓦片构建方法

    作 者 信 息 应 申1,2,王子豪1,杜志强3,丁火平4, 李翔翔4 (1. 武汉大学 资源与环境科学学院,湖北 武汉 430079:2. 自然资源部城市国土资源监测与仿真重点实验室,广东 深圳 5 ...

  5. 【OpenCV-Python】21.OpenCV的二维直方图

    21.OpenCV的二维直方图 文章目录 前言 一.OpenCV中的二维直方图 二.Numpy中的二维直方图 三.直方图示例 1.使用Numpy函数计算直方图 2.使用OpenCV函数计算直方图 四. ...

  6. 可完全分离的二维矢量图加密域鲁棒可逆水印算法(一)

    摘要 随着云制造技术的兴起,加密域可逆水印技术逐渐受到了较多的关注.然而,现有的大部分算法不仅只能应用于图像.视频等冗余性较大的载体,而且难以抵御常见的攻击,甚至只能在单一的域中提取水印.为此,本文针 ...

  7. Opencv之二维码识别---QRCodeDetector

    OpenCV在对象检测模块中QRCodeDetector有两个相关API分别实现二维码检测与二维码解析: # 检测二维码 bool cv::QRCodeDetector::detect(InputAr ...

  8. 梯度下降计实例计算(二维)

    梯度下降计实例计算(二维) 文章目录 内容简介 示例说明 绘制曲线 进一步讨论 参考资料 内容简介 梯度下降是在机器学习中重要的计算内容.本文就一个具体的示例,展示如何在梯度下降中. 示例说明 设损失 ...

  9. 基于OpenCV实现二维码发现与定位

    基于OpenCV实现二维码发现与定位 在如今流行扫描的年代,应用程序实现二维码扫描检测与识别已经是应用程序的标配.特别是在移动端.如果你的应用程序不能自动发现检测二维码,自动定位二维码你都不好意思跟别 ...

最新文章

  1. HTTP Response中的Chunked编码
  2. Linux用Openssl为Apache签发证书
  3. android 手机号分段_android 手机号分段_android系统实现手机号添加分割符
  4. wireshark合并多个文件_TEQC合并多个时段GPS RINEX文件
  5. Storm入门之第一章
  6. 简单的MFC画正弦曲线
  7. C语言试题七之将函数字符串中的前导*号全部删除,中间和尾部的*号不删除。
  8. php hsetnx,HSETNX命令_视频讲解_用法示例-redis编程词典-php中文网
  9. NameNode所需配置,NameNode内存配置计算,NameNode与block关系
  10. SVG 教程 (五)文本,Stroke 属性,SVG 滤镜,SVG 模糊效果
  11. 数据结构与算法python语言描述答案_《数据结构与算法Python语言描述》习题第二章第一题(python版)...
  12. RHEL5 下构建PPTP ***服务器
  13. 输入广义表建立双亲表示的树and给定双亲表示的树输出广义表表示的树
  14. sql语言的一大类 DML 数据的操纵语言
  15. Android 关于IC卡的读写和加密
  16. 解决SecureCRT信号灯超时
  17. 一张图表,人人都能建立自己的AARRR运营模型
  18. 2022年计算机软件水平考试网络管理员(初级)练习题及答案
  19. 有高项(软考)证书,考PMP还要报培训班吗?
  20. atan(y/x)与atan2(y,x)的区别

热门文章

  1. Git版本管理工具常用命令整理和说明
  2. 第四篇、Python文件处理
  3. 二、Swift网络请求回来的数据我这样取
  4. Javascript iframe交互并兼容各种浏览器的解决方案
  5. 10g手动创建数据库
  6. 产品经理与交互设计师的对话——需求是如何变成产品原型的(转)
  7. left join on、where后面的条件的区别
  8. WCF的优势和性能测试
  9. php的布局设计,php学习之div+css布局设计排版(六)
  10. mysql怎么导出导入数据库结构_mysql导入SQL、导出数据库、表、结构