首页 > 其他分享 >OpenCV(cv::magnitude())

OpenCV(cv::magnitude())

时间:2024-09-19 16:38:22浏览次数:6  
标签:梯度 OpenCV magnitude 计算 图像 cv 向量

目录



cv::magnitude() 是 OpenCV 中用于计算向量的大小(模)的函数。它可以处理二维向量的模,也可以用于计算图像中每个像素点的梯度大小,通常在处理图像梯度或傅里叶变换时使用。



1. 函数定义

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

参数:

  1. x: 表示输入的第一个矩阵,可以是图像的 x 方向梯度(或者其它需要计算模的第一维度数据)。InputArray 类型支持多种数据格式,如 cv::Mat
  2. y: 表示输入的第二个矩阵,对应的是第二个维度的数据,比如 y 方向的梯度。
  3. magnitude: 输出矩阵,保存每个输入向量的模。OutputArray 是 OpenCV 通用的输出数据结构,通常为 cv::Mat

函数功能:

cv::magnitude() 计算每个输入元素的模,遵循以下数学公式:

\[magnitude(x, y) = \sqrt{x^2 + y^2} \]

对于二维向量 (x, y),该函数返回向量的欧几里得距离(即模)。



2. 使用场景

  1. 图像梯度计算: 在图像处理中,通常会通过 Sobel 算子计算 x 和 y 方向的梯度,然后用 cv::magnitude() 计算梯度的大小。
  2. 傅里叶变换后的频谱: 通过傅里叶变换后获得实部和虚部,可以使用 cv::magnitude() 计算频谱的幅值。


3. 示例

以下是一个典型的梯度大小计算的例子:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // 读取图像
    cv::Mat img = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
    if (img.empty()) {
        std::cerr << "图像加载失败" << std::endl;
        return -1;
    }

    // 计算x和y方向的梯度
    cv::Mat grad_x, grad_y;
    cv::Sobel(img, grad_x, CV_32F, 1, 0, 3);  // Sobel X方向梯度
    cv::Sobel(img, grad_y, CV_32F, 0, 1, 3);  // Sobel Y方向梯度

    // 计算梯度模
    cv::Mat magnitude;
    cv::magnitude(grad_x, grad_y, magnitude);

    // 归一化并显示梯度图像
    cv::normalize(magnitude, magnitude, 0, 255, cv::NORM_MINMAX, CV_8U);
    cv::imshow("Gradient Magnitude", magnitude);
    cv::waitKey(0);

    return 0;
}

代码说明:

  1. 使用 cv::Sobel() 计算图像在 x 和 y 方向的梯度。
  2. 调用 cv::magnitude() 计算每个像素点的梯度大小。
  3. 使用 cv::normalize() 对结果进行归一化,便于显示。
  4. 最终将梯度大小的图像显示出来。


4. 注意事项

  • 输入矩阵 xy 的大小必须相同。
  • 如果输入矩阵的数据类型不同(例如,一个是 CV_32F,另一个是 CV_8U),需要进行类型转换,通常建议输入为浮点型数据(CV_32FCV_64F),以避免精度丢失。

通过 cv::magnitude(),你可以轻松地处理二维数据,尤其是在图像处理、向量运算中。



标签:梯度,OpenCV,magnitude,计算,图像,cv,向量
From: https://www.cnblogs.com/keye/p/18420878

相关文章

  • 什么是轻量应用服务器?与云服务器CVM对比有哪些区别?
    对比云服务器CVM,轻量应用服务器TencentCloudLighthouse更聚焦于中小企业、开发者、云计算入门者、学生等用户群体。相比云服务器CVM更加简单易用,精简了云服务器CVM的高阶概念及功能,提供高带宽流量包并以高性价比的套餐形式整体售卖基础云资源,将热门开源软件融合打包实现一......
  • 9月京东云云服务器CVM价格配置表汇总-金秋上云!
    轻量云主机是面向中小企业、开发者打造的预装精选软件、开箱即用的主机产品,快速搭建网站、电商、企业低代码工具箱,云盘、共享文档、知识库、开发测试环境等,相对普通云主机,按套餐购买更优惠、控制台可视化管理,运维更简单,提供更便捷上云体验。轻量云主机这个专区是本次活动的主要专区......
  • 护目镜佩戴检测系统 Opencv
    护目镜佩戴检测系统利用摄像头和图像识别技术,护目镜佩戴检测系统实时监测工人的护目镜佩戴情况,护目镜佩戴检测系统通过拍摄工人的面部图像,并使用算法分析图像中的眼睛和护目镜位置,判断是否正确佩戴护目镜。护目镜佩戴检测系统能够实时监测工人的护目镜佩戴情况,护目镜佩戴检测系统及......
  • py3.7+win10的cv2.xfeatures2d_SIFT.create()函数不存在问题
    python3.7环境window1064位cv2包问题。问题做图片处理用opencv-python做模板匹配的时候会用个sift模型,就会用到cv2.xfeatures2d_SIFT.create()这个函数,在我正要用它增加自己知识,巴拉巴啦....的时候,咦?!这是个什么鬼哦,没有这个函数呢。百度发现需要什么卸载原版本,换成opencv-......
  • Log4j2—漏洞分析(CVE-2021-44228)
    目录Log4j2漏洞原理漏洞根因调用链源码分析调用链总结漏洞复现dnsrmiLog4j2漏洞原理前排提醒:本篇文章基于我另外一篇总结的JNDI注入后写的,建议先看该文章进行简单了解JNDI注入:https://blog.csdn.net/weixin_60521036/article/details/142322372提前小结说明:Log4j2(CVE-2021-4......
  • 设计资料保存:372-基于XC7VX690T的万兆光纤、双FMC扩展的综合计算平台 RISCV 芯片验证
      一、板卡概述      基于V7的高性能PCIe信号处理板,板卡选用Xilinx 公司Virtex7系列FPGA XC7VX690T-2FFG1761C为处理芯片,板卡提供两个标准FMC插槽,适用于高性能采集、回放以及相关处理。通过连接不同的FMC子卡的方式,可实现不同形式的数据采集、回放、处理的功能模块。板......
  • CVE-2024-45409 漏洞解决方案
    漏洞描述CVE-2024-45409漏洞是由RubySAML库引起的。RubySAML库是用于实现SAML授权的客户端。12.2及以下的所有版本、1.13.0到1.16.0之间的Ruby-SAML版本都受此影响。这些版本不能够正确验证SAML响应的签名。因此,具有访问任何身份提供者(IdP)签署的SAML文档的未经......
  • SSD-KD:天翼云&清华出品,最新无原始数据的蒸馏研究 | CVPR'24
    无数据知识蒸馏能够利用大型教师网络所学到的知识,来增强较小型学生网络的训练,而无需访问原始训练数据,从而避免在实际应用中的隐私、安全和专有风险。在这方面的研究中,现有的方法通常遵循一种反演蒸馏的范式,在预训练教师网络指导下实时训练生成对抗网络来合成一个大规模的样本集用......
  • 设计方案:372-基于7VX690T的万兆光纤、双FMC扩展的综合计算平台 RISCV 芯片验证平台
    基于7VX690T的万兆光纤、双FMC扩展的综合计算平台RISCV芯片验证平台 一、板卡概述      基于V7的高性能PCIe信号处理板,板卡选用Xilinx 公司Virtex7系列FPGA 7VX690T-2FFG1761C为处理芯片,板卡提供两个标准FMC插槽,适用于高性能采集、回放以及相关处理。通过连接不同的FMC......
  • OpenCV_图像旋转超详细讲解
    图像转置transpose(src, dst);transpose()可以实现像素下标的x和y轴坐标进行对调:dst(i,j)=src(j,i),接口形式transpose(InputArraysrc,//输入图像OutputArraydst,//输出)图像翻转flip(src,dst,1);flip()函数可以实现对图像的水平翻转、垂直翻转和双向......