当前位置: 首页 > article >正文

OpenCV normalize() 函数详解及用法示例

        OpenCV的normalize函数用于对数组(图像)进行归一化处理,即将数组中的元素缩放到一个指定的范围或具有一个特定的标准(如均值和标准差)。它有两个原型函数, 如下:

Normalize()规范化数组的范数或值范围。当normType=NORM_INF、NORM_L1或NORM_L2时,函数cv::normalize对输入数组元素进行归一化和移位,使得∥dst∥Lp=alpha(其中p=Inf、1或2);或者当normType=NORM_MINMAX时minIdst(I)=alpha,maxIdst(I)=beta(仅适用于密集数组)。可选掩码指定要标准化的子数组。这意味着在子数组上计算范数或 min-n-max,然后修改该子数组以进行归一化。如果您只想使用掩码来计算范数或最小值-最大值但修改整个数组,则可以使用范数和 Mat::convertTo。

        

函数参数:

       src 输入数组(单通道或多通道)。

       dst 输出数组,与输入数组有相同的形状和类型(或者根据dtype参数指定的类型)。

alpha在范围归一化的情况下,要归一化到的范数值或范围下限(normType=NORM_MINMAX时)。

       beta 范围归一化情况下的范围上限(仅当NORM_MINMAX类型被使用时才需要);它不用于范数标准化。

       normal_type 标准化类型,有以下几种:

        dtype 当为负数时,输出数组与 src 具有相同的类型;否则,它具有与 src 相同的通道数和深度 =CV_MAT_DEPTH(dtype)。

        mask 可选操作掩码。

这是一个重载成员函数,为方便起见而提供。它与上述函数的不同之处仅在于它接受的参数。

        示例:

        新建一个控制台应用程序Project,在源程序中添加如下代码:

// normalizeTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

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

using namespace std;
using namespace cv;

int main()
{
    
    vector<double> data = {1,2,3,4,10};
    vector<double> ndata;
    int length = data.size();

    cout << "Data:" << endl;
    for (int i = 0; i < length; i++)
    {
        cout << data[i] << "  ";
    }
    cout << endl;
    cout << endl;

    //normal_type: NORM_INF
    normalize(data, ndata, 1.0, 0, NORM_INF);
    cout << "NORM_INF result:" << endl;
    for (int i = 0; i < length; i++)
    {
        cout << ndata[i];
    }
    cout << endl;
    cout << endl;

    //normal_type: NORM_L1
    normalize(data, ndata, 1.0, 0, NORM_L1);
    cout << "NORM_L1 result:" << endl;
    for (int i = 0; i < length; i++)
    {
        cout << ndata[i]<<"  ";
    }
    cout << endl;
    cout << endl;

    //normal_type: NORM_L2
    normalize(data, ndata, 1.0, 0, NORM_L2);
    cout << "NORM_L2 result:" << endl;
    for (int i = 0; i < length; i++)
    {
        cout << ndata[i]<<"  ";
    }
    cout << endl;
    cout << endl;

    //normal_type: NORM_MINMAX 1
    normalize(data, ndata, 1.0, 0, NORM_MINMAX);
    cout << "NORM_MINMAX 1 result:" << endl;
    for (int i = 0; i < length; i++)
    {
        cout << ndata[i] << "  ";
    }
    cout << endl;
    cout << endl;

    //normal_type: NORM_MINMAX 1
    normalize(data, ndata, 0, 255, NORM_MINMAX);
    cout << "NORM_MINMAX 2 result:" << endl;
    for (int i = 0; i < length; i++)
    {
        cout << ndata[i] << "  ";
    }
    

    return 0;
}

试运行,结果如下:


http://www.kler.cn/news/318832.html

相关文章:

  • 钰泰-ETA6964A 锂电池充电器IC
  • 基于STM32F103C8T6单片机的农业环境监测系统设计
  • 3D模型在UI设计中应用越来越多,给UI带来了什么?
  • API代理是什么?解读其原理与作用
  • golang context管理channel
  • 【数据库】sqlite
  • 【C++】托管类和托管函数
  • 大模型备案和互联网算法备案的区别?
  • Linux软件包管理器、Linux开发工具、vim的配置等的介绍
  • RabbitMQ简介
  • AI产品经理必知的133个专业术语
  • 高阶函数(Higher-Order Function)
  • 高侧电流检测电路设计
  • [新闻]Tom Sawyer Software宣布发布SysML v2 Viewer
  • GLM-4-9B 是智谱 AI 推出的预训练模型 GLM-4 系列中的开源版本
  • Pytest-allure如何在测试完成后自动生成完整报告?
  • 占领矩阵-第15届蓝桥省赛Scratch中级组真题第5题
  • 桥梁轻量化结构监测系统解决方案
  • [OPEN SQL] SELECT语句
  • Android JNI 调用流程
  • 深入理解主键回显:提升数据操作效率与准确性
  • 目标检测系列(一)什么是目标检测
  • OpenMV与STM32通信
  • 稳了,搭建Docker国内源图文教程
  • Mysql梳理10——使用SQL99实现7中JOIN操作
  • C++ 面试模拟02
  • 2024 年最新 Protobuf 结构化数据序列化和反序列化详细教程
  • React Native 在 build 的时候如果出现 `babel.config.js` 配置文件的错误
  • 音频北斗定位系统有什么用?
  • C++入门编程题(力扣):字符串中最多数目的子序列