cv::normalize()
`cv::normalize()`函数是OpenCV库中用于对矩阵或图像数据进行归一化处理的工具。归一化是图像处理和计算机视觉中常见的预处理步骤,它可以确保数据在一定范围内,从而有助于后续的处理和算法的稳定性和性能。`cv::normalize()`函数可以将输入矩阵的值缩放到一个指定的范围,或者将矩阵的值标准化,使其符合某种统计特性,如单位范数。
### 函数原型
`cv::normalize()`函数有多种重载形式,其中一个常用的原型如下:
```cpp
void normalize(InputArray src, OutputArray dst, double alpha, double beta, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray());
```
### 参数说明
- **src**:输入矩阵或图像,可以是`cv::Mat`类型。
- **dst**:输出矩阵或图像,将保存归一化后的结果。
- **alpha**:归一化后的数据的最小值。
- **beta**:归一化后的数据的最大值。
- **norm_type**:归一化类型,常见的有:
- `NORM_INF`:无穷范数归一化。
- `NORM_L1`:L1范数归一化。
- `NORM_L2`:L2范数归一化。
- `NORM_MINMAX`:将数据缩放到指定的`alpha`和`beta`范围内。
- **dtype**:输出矩阵的数据类型。如果设置为-1,则输出矩阵的数据类型与输入矩阵相同。
- **mask**:可选参数,用于指定归一化的区域。如果提供,只有mask中的非零元素对应的输入矩阵元素会被归一化。
### 归一化类型详解
- **NORM_INF**:将输入矩阵的每个元素除以其绝对值的最大值,使得矩阵的最大绝对值变为1。
- **NORM_L1**:将输入矩阵的每个元素除以所有元素绝对值的总和,即L1范数。
- **NORM_L2**:将输入矩阵的每个元素除以所有元素平方根的和,即L2范数。
- **NORM_MINMAX**:将输入矩阵的值缩放至`alpha`和`beta`之间。这通常用于将数据映射到0到1或-1到1的范围,以改善数据的对比度或用于神经网络输入等。
### 示例代码
下面是一个使用`cv::normalize()`函数进行归一化的示例:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 创建一个测试矩阵
cv::Mat matrix = (cv::Mat_<float>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);
// 归一化矩阵至0到1之间
cv::Mat normalized_matrix;
cv::normalize(matrix, normalized_matrix, 0, 1, cv::NORM_MINMAX, -1);
// 打印归一化后的矩阵
std::cout << "Normalized Matrix:\n" << normalized_matrix << std::endl;
return 0;
}
```
在这个示例中,我们创建了一个3x3的矩阵,并使用`cv::normalize()`函数将其归一化至0到1的范围。归一化后的矩阵将打印出来,可以看到所有元素的值都在0到1之间。
### 注意事项
- 在使用`NORM_L1`或`NORM_L2`进行归一化时,如果输入矩阵中有0值,可能需要先添加一个小的正值避免除以0的错误。
- 当使用`NORM_MINMAX`时,如果`alpha`和`beta`设置不当,可能会导致输出矩阵中的某些值超出预期范围。
- 归一化操作可能会改变数据的动态范围和分布,因此在归一化前后,可能需要检查数据的统计特性是否符合后续处理的要求。
cv::normalize(hist1, hist1, 1.0);
是对一个名为`hist1`的`cv::Mat`或`cv::MatND`对象进行归一化操作。这里,`hist1`通常是一个直方图数据,即`hist1`包含了图像或信号的频率分布信息。
### 参数解析
- **`hist1` (InputArray)**:这是要被归一化的输入直方图。在归一化操作后,`hist1`将被直接修改以反映归一化后的结果。
- **`hist1` (OutputArray)**:这是归一化后的输出直方图。由于输入和输出引用了同一个对象,这意味着函数直接在`hist1`上进行修改,而不创建一个新的矩阵。
- **`1.0` (double)**:这是一个重要的参数,决定了归一化的类型和目标值。在这里,`1.0`通常与`NORM_L1`或`NORM_L2`归一化类型相关联。它表示归一化的目标范数值,即所有元素的L1范数(绝对值之和)或L2范数(平方和的平方根)将被缩放至1。
归一化类型
由于在代码片段中没有明确指定`norm_type`参数,`cv::normalize()`函数将使用默认的归一化类型`NORM_L2`。因此,这段代码将执行L2范数归一化,即将`hist1`的L2范数(所有元素平方和的平方根)缩放至1。这意味着归一化后,`hist1`的元素将被调整,使得它们的平方和的平方根等于1。
作用
进行直方图归一化通常是为了以下目的:
- **比较直方图**:当比较两个直方图的相似性时,归一化可以消除图像大小或亮度差异的影响,使得比较更加公平。
- **概率解释**:如果直方图被视为一个概率分布,归一化可以确保所有概率加起来等于1,符合概率论的要求。
- **算法兼容性**:某些机器学习或计算机视觉算法可能要求输入数据满足特定的统计属性,如单位L2范数,以保证算法的稳定性和性能。
总结
综上所述,`cv::normalize(hist1, hist1, 1.0);`这行代码执行了对`hist1`的L2范数归一化,将直方图`hist1`的元素值调整,以确保它们的平方和的平方根等于1。这种处理在图像处理和计算机视觉领域中是常见且必要的预处理步骤。
相关文章:
cv::normalize()
cv::normalize()函数是OpenCV库中用于对矩阵或图像数据进行归一化处理的工具。归一化是图像处理和计算机视觉中常见的预处理步骤,它可以确保数据在一定范围内,从而有助于后续的处理和算法的稳定性和性能。cv::normalize()函数可以将输入矩阵的值缩放到一…...
【Python快速入门和实践016】Python常用脚本-对视频抽取指定帧数并保存
一、功能介绍 这段代码的功能是从一个视频文件中抽取指定数量的帧,并将这些帧保存为图像文件。步骤如下: 设置路径和参数: video_path:视频文件的路径。image_folder:保存抽取图像的目录。num_frames_to_extract&#…...
[Linux CMD] 目录与文件相关的命令
. 代表次层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表目前使用者身份所在的家目录 ~account 代表account这个使用者的家目录(account是个账号名称)…...
redis面试(十三)公平锁排队代码剖析
我们来看一下第二种redis分布式锁 第一种锁是可重入锁,非公平可重入锁,所谓的非公平可重入锁是什么意思呢?胡乱的争抢,根本没有任何公平性和顺序性可言 第二种锁,可重入锁,公平锁 通过公平锁,…...
冷热数据拆分
订单系统设计方案之如何做历史订单和归档 订单数据越来越多,数据库越来越慢该怎么办? 随着历史订单不断累积,2017年MySQL中订单表数据量已达千万级。之后的订单数据,远远大于亿级 对数据量大的问题,进行了以下优化…...
JavaScript 基础(四)
五、DOM编程 1.常用事件 onload 页面加载后触发事件 onscroll 滚动时触发 onresize 尺寸变化时 onclick 鼠标点击 onmouseover 鼠标悬停 onmouseout 鼠标移出 onmousemove 鼠标移动,会触发多次 onfocus 对象获得光标(焦点)时&#x…...
《机器学习by周志华》学习笔记-神经网络-01神经元模型
1、背景 本书所谈的「人工神经网络」不是生物学意义的神经网络。这是T.Kohonen 1988年在Neural Networks创刊号上给出的定义。 2、概念 2.1、神经网络 关于「神经网络(neural networks)」的研究很早就已经出现过,今天的「神经网络」已经是一个比较大且多学科交叉的领域,其…...
C#中常用的扩展类
/// <summary>/// 常用扩展/// </summary>public static class UsualExtension{public static string[] chineseNumbers { "零", "一", "二", "三", "四", "五", "六", "七", &…...
麒麟v10(ky10.x86_64)升级——openssl-3.2.2、openssh-9.8p1
系统版本: ky10.x86_64 下载安装包并上传 openssh下载地址 https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable openssl下载地址 https://openssl-library.org/source/index.html zlib下载地址 https://zlib.net/fossils/ 上传安装包 备份配置文件 cp -r /etc/ssh /et…...
【Unity】有限状态机和抽象类多态
一、介绍 有限状态机是一个用来进行对象状态管理的计算模型。它由一组状态、一个或者多个触发事件以及状态之间的转换条件所组成。 对于任意一个游戏对象,我们可以为其编写一个或者多个状态机,使其能够在不同状态下有不同的决策和运作机制。 核心思想…...
KETTLE调用http传输中文参数的问题
场景:检查服务器异常(hive)服务,就通过http发送一条短信到手机上,内容类似:【通知】 S T A R T D A T E h i v e 服务检测异常 {START_DATE}_hive服务检测异常 STARTDATEhive服务检测异常{DB_ID}&#…...
Gaussian Splatting 在 Ubuntu22.04 下部署
代码:graphdeco-inria/gaussian-splatting (github) 论文:[2308.04079] 3D Gaussian Splatting for Real-Time Radiance Field Rendering (arxiv.org) 1. 禁用自带驱动 Nouveau Ubuntu 自带的显卡驱动,是非Nvida官方版。在后面装cuda的时候,会报驱动不兼容问题。 1.进入…...
ppt中添加页码(幻灯片编号)及问题解决方案
在幻灯片母版中,选择插入 幻灯片编号 右下角显示幻灯片编号 问题一:母版中没有显示编号 原因可能是母版版式中没有设置显示,勾选即可。 问题二:子母版中没有显示幻灯片 将母版中的编号复制到子母版中。 问题三:应用…...
Flutter 初识:对话框和弹出层
Flutter对话框和弹出层小结 对话框AlertDialog属性解析 showDialog属性解析示例 SimpleDialog示例 AboutDialog属性解析示例 Custom Full-Screen Dialog示例 带动画效果的CustomDialog(showGeneralDialog)属性解析示例 自定义Dialog属性解析示例 输入对话…...
启程与远征Ⅳ--人工智能革命尚未发生
人工智能有望彻底改变工作场所。到目前为止,已经有人工智能工具可以取代或增强每一项工作,并使生产力飞速提升。甚至有许多人预测,文案写作等整个行业将在未来几年内被人工智能工具完全取代。但是,如果你抛开炒作,看看…...
Python教程(十五):IO 编程
目录 专栏列表引言基础概念什么是IO? 同步IO vs 异步IO同步IO(Synchronous IO)异步IO(Asynchronous IO) Python中的IO标准IO标准输入和输出 文件IO文件操作的上下文管理器打开文件读取文件操作内存中的数据 高级文件操…...
Qt窗口交互场景、子窗口数据获取
一、前言 在现代软件开发中,图形用户界面(GUI)的设计不仅仅关乎美观,更在于用户体验和功能的无缝衔接。Qt框架以其强大的跨平台能力和丰富的组件库,成为众多开发者构建GUI应用的首选工具。在Qt应用中,窗口…...
【C++学习笔记 18】C++中的隐式构造函数
举个例子 #include <iostream> #include <string>using String std::string;class Entity{ private:String m_Name;int m_Age; public:Entity(const String& name):m_Name(name), m_Age(-1) {}Entity(int age) : m_Name("UnKnown"), m_Age(age) {}…...
单元训练01:LED指示灯的基本控制
蓝桥杯 小蜜蜂 单元训练01:LED指示灯的基本控制 #include "stc15f2k60s2.h" #include <intrins.h>#define LED(x) \{ \P2 P2 & 0x1f | 0x80; \P0 x; \P2 & 0x1f; \}…...
Sanic 和 Go Echo 对比
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
