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

opencv图像像素类型转换与归一化

文章目录

      • opencv图像像素类型转换与归一化
        • 1、为什么对图像像素类型转换与归一化
        • 2、在OpenCV中,`convertTo()` 和 `normalize()` 是两个常用的图像处理函数,用于图像像素类型转换和归一化;
          • (1)`convertTo()` 函数用于将一个 `cv::Mat` 对象的像素类型转换为另一种类型。它的基本用法如下:
          • (2)`normalize()` 函数用于将图像的像素值归一化到指定的范围内,通常是 [0, 1] 或 [0, 255]。
        • 3、代码实例说明:
          • (1)图像像素类型转换:
          • (2)图像归一化:将图像像素的值映射到一个特定的范围内,通常是[0, 1]或者[0, 255]。
            • convertTo() 函数
            • normalize() 函数

opencv图像像素类型转换与归一化

1、为什么对图像像素类型转换与归一化
  • 数据一致性:不同的图像可能使用不同的像素类型来表示图像数据,如8位无符号整数、16位无符号整数、32位浮点数等。在某些情况下,为了进行后续处理或者与其他图像进行比较,需要确保所有图像使用相同的数据类型,因此需要进行像素类型转换,以使它们的数据类型一致。
  • 算法需求:某些图像处理算法对输入图像的数据类型有特定的要求。例如,某些滤波器或变换可能需要输入为浮点数图像,因此需要将图像像素类型从整数转换为浮点数。
  • 增强对比度:归一化是将像素值映射到特定范围内,通常是[0, 1]或[0, 255]。这可以用来增强图像的对比度,使亮度范围更易于可视化或用于后续处理。
  • 避免溢出和截断:在进行一些图像操作时,像素值可能会超出特定范围(如255对于8位无符号整数图像)。归一化可以确保像素值在有效范围内,避免溢出或截断。
  • 数据处理和机器学习:在机器学习和深度学习中,通常需要将输入数据进行标准化或归一化,以便模型的训练和性能更好。图像像素值的归一化可以是这个过程的一部分。
  • 显示和可视化:有时候,将图像像素值归一化到合适的范围可以更好地显示图像或将其可视化,使图像更容易理解和分析。
2、在OpenCV中,convertTo()normalize() 是两个常用的图像处理函数,用于图像像素类型转换和归一化;
  • 图像的像素类型就是cv::Mat元素的数据类型
  • cv::Mat的元素类型决定了它可以存储的数据的种类,比如8位无符号整数(CV_8U)、16位无符号整数(CV_16U)、32位浮点数(CV_32F)等等。不同的元素类型决定了图像的颜色深度、精度以及可以表达的范围。
(1)convertTo() 函数用于将一个 cv::Mat 对象的像素类型转换为另一种类型。它的基本用法如下:
void cv::Mat::convertTo(OutputArray m,int rtype,double alpha = 1,double beta = 0
) const;参数解释:
m:输出的目标图像;
rtype:目标图像的数据类型(可以使用 OpenCV 提供的常量如CV_8U、CV_16U、CV_32F等);
alpha:缩放因子,用于线性变换。默认为1; 
beta:偏移量,用于线性变换。默认为0

示例:

cv::Mat img = cv::imread("input.jpg");
cv::Mat new_img;
img.convertTo(new_img, CV_32F); // 将图像转换为32位浮点数类型
(2)normalize() 函数用于将图像的像素值归一化到指定的范围内,通常是 [0, 1] 或 [0, 255]。
void cv::normalize(InputArray src,  OutputArray dst,   double alpha = 0,  double beta = 255,    int norm_type = NORM_L2,   int dtype = -1,           InputArray mask = noArray()   
);参数解释:
src:输入图像;
dst:输出归一化后的图像;
alpha:归一化的下界; 
beta:归一化的上界; 
norm_type:归一化类型,默认为NORM_L2(NORM_MINMAXNORM_INFNORM_L1NORM_L2
)
dtype:输出图像的数据类型(默认值-1,如果为负数,将使用输入图像的数据类型) ;
mask:掩码,可选参数; 

示例:

cv::Mat img = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat normalized_img;
cv::normalize(img, normalized_img, 0, 255, cv::NORM_MINMAX, CV_8U);在这个示例中,normalize() 函数将图像的像素值归一化到 [0, 255] 的范围内,并将结果保存在 normalized_img 中。

总的来说,convertTo() 用于更改图像的数据类型,而 normalize() 用于将像素值归一化到指定范围内。这两个函数在图像处理中经常会用到,可以根据具体的需求来选择使用。

3、代码实例说明:
(1)图像像素类型转换:
#include <opencv2/opencv.hpp>
#include <iostream>int main() {// 读取图像cv::Mat img = cv::imread("input.jpg");if (img.empty()) {std::cerr << "Could not read the image." << std::endl;return -1;}// 转换前的像素数据类型CV_8UC3std::cout << img.type() << std::endl;// 将图像从当前类型转换为新的类型CV_32FC3cv::Mat new_img;img.convertTo(new_img, CV_32F); // 这里将图像转换为32位浮点数类型,可以使用 CV_8U、CV_16U、CV_32F 等来选择不同的目标类型// 转换后的像素数据类型std::cout << new_img.type() << std::endl;// 进一步处理 new_img ...return 0;
}
(2)图像归一化:将图像像素的值映射到一个特定的范围内,通常是[0, 1]或者[0, 255]。
convertTo() 函数

将像素值归一化到[0, 1]范围:

#include <opencv2/opencv.hpp>
#include <iostream>int main() {// 读取灰度图像cv::Mat img = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);if (img.empty()) {std::cerr << "Could not read the image." << std::endl;return -1;}// 将像素值转换为浮点数类型并归一化cv::Mat normalized_img;img.convertTo(normalized_img, CV_32F);normalized_img /= 255.0;// 进一步处理 normalized_img ...return 0;
}

将像素值归一化到[0, 255]范围:

#include <opencv2/opencv.hpp>
#include <iostream>int main() {// 读取灰度图像cv::Mat img = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);if (img.empty()) {std::cerr << "Could not read the image." << std::endl;return -1;}// 将像素值转换为整数类型并归一化cv::Mat normalized_img;img.convertTo(normalized_img, CV_8U);normalized_img *= 255;// 进一步处理 normalized_img ...return 0;
}
normalize() 函数

将像素值归一化到[0, 1]范围:

#include <opencv2/opencv.hpp>
#include <iostream>int main() {// 读取灰度图像cv::Mat img = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);if (img.empty()) {std::cerr << "Could not read the image." << std::endl;return -1;}// 将像素值转换为浮点数类型并归一化cv::Mat normalized_img;cv::normalize(img, normalized_img, 0.0, 1.0, cv::NORM_MINMAX, CV_32F);// 进一步处理 normalized_img ...return 0;
}

将像素值归一化到[0, 255]范围:

#include <opencv2/opencv.hpp>
#include <iostream>int main() {// 读取灰度图像cv::Mat img = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);if (img.empty()) {std::cerr << "Could not read the image." << std::endl;return -1;}// 将像素值归一化到[0, 255]范围cv::Mat normalized_img;cv::normalize(img, normalized_img, 0, 255, cv::NORM_MINMAX, CV_8U);// 进一步处理 normalized_img ...return 0;
}

convertTo()normalize() 这两个函数都可以用来对图像进行归一化,但它们的具体用途略有不同:

  • convertTo() 函数用于将一个 cv::Mat 对象的像素类型转换为另一种类型,它可以用于进行不同类型之间的转换,包括归一化。例如,可以将图像从8位无符号整数转换为32位浮点数类型,也可以将像素值映射到特定范围内。
  • normalize() 函数专门用于将图像的像素值归一化到指定的范围内,通常是 [0, 1] 或 [0, 255]。这是一种特定于归一化的函数,通常用于数据预处理等情况。

两者可以根据实际需要来选择使用,但请注意它们的不同用途和参数。如果你只需要进行简单的归一化操作,那么 normalize() 可能更为直观和方便。如果需要进行更复杂的类型转换,包括将图像从一种类型转换为另一种类型,那么 convertTo() 可能更为适合。

相关文章:

opencv图像像素类型转换与归一化

文章目录 opencv图像像素类型转换与归一化1、为什么对图像像素类型转换与归一化2、在OpenCV中&#xff0c;convertTo() 和 normalize() 是两个常用的图像处理函数&#xff0c;用于图像像素类型转换和归一化&#xff1b;&#xff08;1&#xff09;convertTo() 函数用于将一个 cv…...

【自学开发之旅】Flask-前后端联调-异常标准化返回(六)

注册联调&#xff1a; 前端修改&#xff1a; 1.修改请求向后端的url地址 文件&#xff1a;env.development修改成VITE_API_TARGET_URL http://127.0.0.1:9000/v1 登录&#xff1a;token验证 校验forms/user.py from werkzeug.security import check_password_hash# 登录校验…...

springcloud3 分布式事务解决方案seata之XA模式4

一 seata的模式 1.1 seata的几种模式比较 Seata基于上述架构提供了四种不同的分布式事务解决方案&#xff1a; XA模式&#xff1a;强一致性分阶段事务模式&#xff0c;牺牲了一定的可用性&#xff0c;无业务侵入 TCC模式&#xff1a;最终一致的分阶段事务模式&#xff0c;有…...

编译ctk源码

目录 前景介绍 下载The Common Toolkit (CTK) cmake-gui编译 vs2019生成 debug版本 release版本 前景介绍 CTK&#xff08;Common Toolkit&#xff09;是一个用于医学图像处理和可视化应用程序开发的工具集&#xff0c;具有以下特点&#xff1a; 基于开源和跨平台的Qt框…...

前后端分离的低代码快速开发框架

低代码开发正逐渐成为企业创新的关键工具。通过提高开发效率、降低成本、增强灵活性以及满足不同用户需求&#xff0c;低代码开发使企业能够快速响应市场需求&#xff0c;提供创新解决方案。选择合适的低代码平台&#xff0c;小成本组建一个专属于你的应用。 项目简介 这是一个…...

【Java 基础篇】Java同步代码块解决数据安全

多线程编程是现代应用程序开发中的常见需求&#xff0c;它可以提高程序的性能和响应能力。然而&#xff0c;多线程编程也带来了一个严重的问题&#xff1a;数据安全。在多线程环境下&#xff0c;多个线程同时访问和修改共享的数据可能导致数据不一致或损坏。为了解决这个问题&a…...

亿纬锦能项目总结

项目名称&#xff1a;亿纬锦能 项目链接&#xff1a;https://www.evebattery.com 项目概况: 此项目用到了 wow.js/slick.js/swiper-bundle.min.js/animate.js/appear.js/fullpage.js以及 slick.css/animate.css/fullpage.css/swiper-bundle.min.css/viewer.css 本项目是一种…...

简明 SQL 组合查询指南:掌握 UNION 实现数据筛选

在SQL中&#xff0c;组合查询是一种将多个SELECT查询结果合并的操作&#xff0c;通常使用UNION和UNION ALL两种方式。 UNION 用于合并多个查询结果集&#xff0c;同时去除重复的行&#xff0c;即只保留一份相同的数据。UNION ALL 也用于合并多个查询结果集&#xff0c;但不去除…...

【springMvc】自定义注解的使用方式

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》 ⛺️ 生活的理想&#xff0c;为了不断更新自己 ! 1.前言 1.1.什么是注解 Annontation是Java5开始引入的新特征&#xff0c;中文名称叫注解。 它提供了一种安全…...

求二维子数组的和(剖析)

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;本篇剖析一下二维子数组求和规则&#xff1a; &#x1f412;个人主页 &#x1f3c5;JavaSE系列专栏 &#x1f4d6;前言&#xff1a;本篇剖析一下二维子数组求和 规则&#xff1a; 这…...

无(低)代码开发思路介绍

无代码或者低代码开发的思路,是通过非编程代码,而是基于页面拖拉拽的方式来实现创建web应用的功能。 作为程序员我们知道私有云公有云已经实现了基础设施的web方式管理。DEVOPS把代码发布,管理也实现了web方式管理。那么我们很容易能够想到,只要把拖拉拽出来的项目自动化部…...

代码随想录刷题 Day14

144.二叉树的前序遍历(opens new window) 要注意下创建函数参数传递不是很理解 class Solution { public:void tranversal(TreeNode* s, vector<int> &b) {if (s NULL) {return;}b.push_back(s->val);tranversal(s->left, b);tranversal(s->right, b);}v…...

二分类问题的解决利器:逻辑回归算法详解(一)

文章目录 &#x1f34b;引言&#x1f34b;逻辑回归的原理&#x1f34b;逻辑回归的应用场景&#x1f34b;逻辑回归的实现 &#x1f34b;引言 逻辑回归是机器学习领域中一种重要的分类算法&#xff0c;它常用于解决二分类问题。无论是垃圾邮件过滤、疾病诊断还是客户流失预测&…...

docker alpine镜像中遇到 not found

1.问题&#xff1a; docker alpine镜像中遇到 sh: xxx: not found 例如 # monerod //注&#xff1a;此可执行文件已放到/usr/local/bin/ sh: monerod: not found2.原因 由于alpine镜像使用的是musl libc而不是gnu libc&#xff0c;/lib64/ 是不存在的。但他们是兼容的&…...

python的多线程多进程与多协程

python的多线程是假多线程&#xff0c;本质是交叉串行&#xff0c;并不是严格意义上的并行&#xff0c;或者可以这样说&#xff0c;不管怎么来python的多线程在同一时间有且只有一个线程在执行(举个例子&#xff0c;n个人抢一个座位&#xff0c;但是座位就这一个&#xff0c;不…...

一文介绍使用 JIT 认证后实时同步用户更加优雅

首先本次说的 JIT 指的是 Just In Time &#xff0c;可以理解为及时录入&#xff0c;一般用在什么样的场景呢&#xff1f; 还记的上次我们说过关于第三方组织结构同步的功能实现&#xff0c;主要目的是将第三方源数据同步到内部平台中来&#xff0c;方便做管控和处理 此处的管…...

搞定“项目八怪”,你就是管理高手!

大家好&#xff0c;我是老原。 玛丽.弗列特说&#xff1a;“权力已经逐渐被视为一个群体的组合能力。我们通过有效联系获取力量。” 有效联系也就是指的沟通&#xff0c;这个部分占据我们项目经理工作内容的80%&#xff0c;可见沟通在项目管理中的重要性。 项目经理的沟通包…...

机器视觉-标定篇

3D结构光标定 结构光视觉的优点&#xff1a; 非接触、信息量大、测精度高、抗干扰能力强。 结构光视觉传感器参数的标定包括&#xff1a;摄像机参数标定、结构光平面参数标定。 结构光视觉测量原理图 我们不考虑镜头的畸变&#xff0c;将相机的成像模型简化为小孔成像模型…...

linux离线安装make

一、下载rpm包 https://pkgs.org/search/?qmake 二、拷贝至服务器 三、安装make rpm -ivh make-3.82-24.el7.x86_64.rpm四、查看是否安装成功 make -v...

【深度学习】卷积神经网络(LeNet)【文章重新修改中】

卷积神经网络 LeNet 前言LeNet 模型代码实现MINST代码分块解析1 构建 LeNet 网络结构2 加载数据集3 初始化模型和优化器4 训练模型5 训练完成 完整代码 Fashion-MINST代码分块解析1 构建 LeNet 网络结构2 初始化模型参数3 加载数据集4 定义损失函数和优化器5 训练模型 完整代码…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...