当前位置: 首页 > 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 训练模型 完整代码…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...