OpenCV-Python学习(17)—— OpenCV 图像像素类型转换与归一化(cv.normalize)

news2025/1/17 23:15:03

1. 学习目标

  1. 学习 OpenCV 图像像素的类型转换;
  2. 学习 OpenCV 归一化函数。

2. OpenCV 图像像素的类型转换

由于【在 OpenCV-Python 中一切图像数据皆 numpy.array】,因此像素的类型转换可以直接使用 numpy 的类型转换方法。

2.1 将像素转换为 float32

import numpy as np
import cv2 as cv

def check_type():
  img = cv.imread('./images/squirrel_cls.jpg')
  print('img_type',np.dtype(img[0][0][0]))
  print('img_data',img[0][0][0])
  cv.imshow("img", img)

  # 图像像素的类型转换为float32
  img_float32 = np.float32(img)
  print('img_float32_type',np.dtype(img_float32[0][0][0]))
  print('img_float32_data',img_float32[0][0][0])
  cv.imshow("img_float32", img_float32)

  cv.waitKey(0)
  cv.destroyAllWindows()

if __name__ == "__main__":
  check_type()

2.2 数据输出结果

输入图片说明

2.3 图像输出结果

输入图片说明

3. 归一化(cv.normalize)

归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。

首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。

归一化的目的,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系;或是为了作图,原来很难在一张图上作出来,归一化后就可以很方便的给出图上的相对位置等。

3.1 cv.normalize() 函数使用

cv.normalize(src[, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]]]) → dst

3.2 参数说明

参数说明
src表示输入图像。
dst表示输出图像。
alpha表示在范围归一化的情况下,归一化的下限边界或下限边界的标准值。
beta表示在范围归一化的情况下,归一化的上范围边界。
norm_type表示归一化的类型。
dtype表示当为负时,输出数组的类型与src相同;否则,它具有与src相同的通道数。

3.3 norm_type 值说明

说明
NORM_L1表示图像矩阵中值的绝对值的和。
NORM_L2表示图像矩阵中值的平方和的开方。
NORM_INF表示图像矩阵中值的绝对值的最大值。
NORM_MINMAX表示图像矩阵中的数值被平移或缩放到一个指定的范围,线性归一化。

3.4 norm_type 值计算公式

  1. NORM_L1 : 归一化数组的(曼哈顿距离)L1-范数(绝对值的和)

  2. NORM_L2 : 归一化数组的(欧几里德距离)L2-范数(平方和的开方)

  3. NORM_INF : 归一化数组的(切比雪夫距离)L∞-范数(绝对值的最大值)

  4. NORM_MINMAX : 归一化数组的数值被平移或缩放到一个指定的范围

3.5 归一化计算实例

输入图片说明

4. OpenCV 归一化实例代码

4.1 代码

import numpy as np
import cv2 as cv

def check_type():
  img = cv.imread('./images/squirrel_cls.jpg')
  cv.imshow("img", img)

  # 图像像素的类型转换为float32
  img_float32 = np.float32(img)
  cv.imshow("img_float32", img_float32)

  # 归一化 NORM_L1
  img_NORM_L1 = img_float32.copy()
  cv.normalize(img_float32,img_NORM_L1,1,0,cv.NORM_L1)
  print(img_NORM_L1[0][0])
  cv.imshow("img_NORM_L1", img_NORM_L1)

  # 归一化 NORM_L2
  img_NORM_L2 = img_float32.copy()
  cv.normalize(img_float32,img_NORM_L2,1,0,cv.NORM_L2)
  print(img_NORM_L2[0][0])
  cv.imshow("img_NORM_L2", img_NORM_L2)

  # 归一化 NORM_INF
  img_NORM_INF = img_float32.copy()
  cv.normalize(img_float32,img_NORM_INF,1,0,cv.NORM_INF)
  print(img_NORM_INF[0][0])
  cv.imshow("img_NORM_INF", img_NORM_INF)

  # 归一化 NORM_MINMAX
  img_NORM_MINMAX = img_float32.copy()
  cv.normalize(img_float32,img_NORM_MINMAX,1,0,cv.NORM_MINMAX)
  print(img_NORM_MINMAX[0][0])
  cv.imshow("img_NORM_MINMAX", img_NORM_MINMAX)

  cv.waitKey(0)
  cv.destroyAllWindows()

if __name__ == "__main__":
  check_type()

4.2 效果

输入图片说明

4.3 输出第一个像素不同方式的归一化后的值

输入图片说明

5. 总结

  1. 归一化是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。
  2. 理解归一化不同计算方式的过程。

6. 参考

  1. opencv中归一化函数normalize()的原理讲解
  2. 对比度增强(二):直方图正规划与伽马变换 cv.normal()函数使用及原理
  3. 学习【英特尔 OpenCV 初级认证课程-图像像素类型转换与归一化】

7. 说明

其中计算公式的图片直接使用的是opencv中归一化函数normalize()的原理讲解中的图片,如果不允许使用,请联系我,我会删除该部分内容!谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows 下 MongoDB 6 详细安装教程(图文结合)

​ MongoDB是一个基于分布式文件存储 [1] 的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 ​ MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常…

为什么电子商务物流对电商商家的业务如此重要?

正是电子商务物流的推动推动了企业发展包括最大渠道在内的整体生态系统;店内提货、电子商务、分销商、经销商、合作伙伴和全球制造商,推动新客户的增长。电子商务巨头的目标是推动更多的销售并提高客户忠诚度。  无论是内部还是第三方物流公司,改进的电…

springboot simple (11) springboot protostuff

1 protostuff简介 protostuff是一个基于protobuf实现的序列化方法。 优点&#xff1a;不用写.proto文件。 2 springboot protobuf集成开发 第1步&#xff1a;pom文件引入&#xff1a; <dependency><groupId>io.protostuff</groupId><artifactId>pr…

CDGA|数据治理有哪些痛点,该如何应对呢?

数据治理核心目的,就是通过数据的治理,将数据以更加实用更加有价值的赋能使用者创造更大的价值或者是变现能力,但随之而来的问题也日益凸显。 1、数据质量良莠不齐。数据之多,使用之乱,造成的数据不一致,冗余重复等等,通常会使企业花费额外的成本。 2、数据的互联不强,缺乏统一…

95 C语言初阶练习题

CNT=函数调用的次数 do while 不管三七二十一直接进入循环 k=i+j就等于k=k(i+j)** 局部a只能在test函数内使用 &&并且 || 或者

基于java(springboot)广场舞团管理系统源码(java毕业设计)

基于java(springboot)广场舞团管理系统 广场舞团系统&#xff0c;是基于java编程语言&#xff0c;mysql毕业设计&#xff0c;springboot框架和idea工具开发&#xff0c;本系统分为用户&#xff0c;舞团管理者&#xff0c;管理员三个角色&#xff0c;用户可以注册登陆系统&…

对于新技术的发展而言,坚持长期主义,或许才是正道所在

从Meta股价的一路走低到扎克伯格发布的头显并不被用户买账&#xff0c;Facebook全力拥抱Meta正在经历一场过山车。   扎克伯格和他所带领下的Meta遭遇到的如此多的困境和难题&#xff0c;越来越多地让我们开始相信&#xff1a;所谓的元宇宙并非是一蹴而就的&#xff0c;它是一…

JUC并发编程第十四篇,StampedLock(邮戳锁)为什么比ReentrantReadWriteLock(读写锁)更快!

JUC并发编程第十四篇&#xff0c;StampedLock&#xff08;邮戳锁&#xff09;为什么比ReentrantReadWriteLock&#xff08;读写锁&#xff09;更快&#xff01;一、ReentrantReadWriteLock&#xff08;读写锁&#xff09;1、读写锁存在的意义&#xff1f;2、读写锁代码示例3、读…

orCAD Capture DRC规则设置及检查和报错修改

1.进入DRC设置界面: 如下图,依次选中“dsn→Tools→Design Rules Check” 或者 然后会跳出来一个提示框,点击Yes即可 2.进行DRC规则设置: 上面第二步结束之后,就进入到了DRC规则设置界面,主要有四个类别进行设置。如下图,分别是Design Rules Options、Electrriacl Rule…

致初学者:如何学好Python这门编程语言?

前言 对于很多Python这门编程语言的初学者&#xff0c;往往会面临以下问题&#xff1a; Python2和Python3我该学习哪一个&#xff1f; 是否要安装Linux系统学习Python&#xff1f; Python3有各种版本我该安装哪一个&#xff1f; 那么多的图书、视频和电子教程我该选择哪一个&a…

MySQL --- 函数大全 7

目录 1.从地理哈希值返回纬度 ST_LatFromGeoHash() 2.点的返回纬度 ST_Latitude() 3.返回线字符串的长度 ST_Length() 4.从 WKT 构造线字符串 ST_LineFromText&#xff08;&#xff09;/ ST_LineStringFromText&#xff08;&#xff09; 5.从…

excel行列互换方法

excel行列互换的两种方法&#xff1a;使用转置功能和使用函数公式完成行列互换。excel行列互换多用在打印的时候&#xff0c;根据不同的页面设置&#xff0c;有时页面不够用&#xff0c;这个情况就需要用到excel行列互换。 下图是一个简单的excel行列互换的实例应用。4行三列的…

设备备件管理怎么做?

本篇文章将介绍&#xff1a;1、设备备件管理中存在的问题&#xff1b;2、设备备件管理具体怎么做&#xff1f; 设备备件管理&#xff0c;是为了能够按计划进行设备检修&#xff0c;尽量缩短故障停机时间&#xff0c;减少维修费用&#xff0c;在保证备件品种的质量和数量、供应及…

SpringBoot【配置文件】

SpringBoot【配置文件】&#x1f34e;一.配置文件&#x1f352;1.1 配置文件作用&#x1f352;1.2 配置⽂件的格式&#x1f34e;二.properties 配置文件&#x1f352;2.1 properties 基本语法&#x1f352;2.2 properties快捷生成插件(spring tools)&#x1f352;2.3 读取prope…

用好 TypeScript,请再深入一些

TypeScript 已经成为前端编程语言的事实标准。但我从大量的 Code Review 和面试经历中发现&#xff0c;真正能深入使用 TypeScript 的开发其实并不多。如果你不知道 ReturnType<T> 的作用和实现&#xff0c;或许这篇文章也适合你。 当然&#xff0c;我们花大量时间去学习…

tinode客户端安卓版编译手账

前一阵子我自己架设了一个tinode的IM服务器, web直接可以运行 但是安卓版本的一直报错&#xff0c; 具体信息为&#xff1a; No subjectAltNames on the certificate match 问了作者&#xff0c;作者竟然把我的问题直接删除了&#xff0c;还是自己调试代码吧。毕竟源码面前…

两年CRUD,没料到我这渣二本,备战两个月面试阿里,居然侥幸拿下P6的offer

对于很多没有学历优势的人来说&#xff0c;面试大厂是非常困难的&#xff0c;这对我而言&#xff0c;也是一样&#xff0c;出身于二本&#xff0c;原本以为就三点一线的生活度过一生&#xff0c;直到生活上的变故&#xff0c;才让我有了新的想法和目标&#xff0c;因此我这个二…

fl studio21版本如何更新FL最新版升级教程

2022年12月7日晚&#xff0c;全球知名的音乐创作软件&#xff0c;FL Studio正式推出最新21版&#xff0c;为原创音乐人提供更好用的DAW&#xff08;数字音乐工作站&#xff09;工具。 FL Studio中文已上线21新版 FL Studio国人也叫它水果编曲软件&#xff0c;是一款有着20多年…

Java——布隆过滤器

在上一篇博客中讲到位图是用来判定一个正整数是否存在的。对于一个负数&#xff0c;我们可以统一规定让他们加上一个数&#xff0c;变成正数&#xff0c;然后用位图的方式存储。但是对于字符串&#xff0c;我们就没办法存储了。因此发明了布隆过滤器 概念 对于网络上很多需要…

计算机毕设Python+Vue校园新闻发布系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…