OpenCV-Python学习(17)—— OpenCV 图像像素类型转换与归一化(cv.normalize)
2023-09-14 09:15:07 时间
1. 学习目标
- 学习 OpenCV 图像像素的类型转换;
- 学习 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 值计算公式
-
NORM_L1 : 归一化数组的(曼哈顿距离)L1-范数(绝对值的和)
-
NORM_L2 : 归一化数组的(欧几里德距离)L2-范数(平方和的开方)
-
NORM_INF : 归一化数组的(切比雪夫距离)L∞-范数(绝对值的最大值)
-
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. 总结
- 归一化是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。
- 理解归一化不同计算方式的过程。
6. 参考
- opencv中归一化函数normalize()的原理讲解
- 对比度增强(二):直方图正规划与伽马变换 cv.normal()函数使用及原理
- 学习【英特尔 OpenCV 初级认证课程-图像像素类型转换与归一化】
7. 说明
其中计算公式的图片直接使用的是opencv中归一化函数normalize()的原理讲解中的图片,如果不允许使用,请联系我,我会删除该部分内容!谢谢!
相关文章
- python:ERROR: No matching distribution found for Pillow==9.1.0的处理(Python 3.6.8)
- Python 图像处理 OpenCV (14):图像金字塔
- Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接
- Opencv学习笔记 - 关于OpenCV的UMat 类
- Opencv学习笔记 OpenCV源码以及模块的组成结构
- 【OpenCV-Python】cvui 之 图像
- 【OpenCV-Python】教程:5-1 背景减法
- Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法、如何查询某个函数&关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略
- 成功解决sub_div.insert(points)cv2.error: OpenCV(3.4.1) C:projectsopencv-pythonopencvmodulesimgproc
- Python编程语言学习:python中浅复制/深复制(或浅拷贝/深拷贝)的简介、案例应用注意事项之详细攻略
- Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略
- Python:python语言中与时间有关的库函数简介、安装、使用方法(获取当前时间/计算程序块前后运行时间/模型训练时间或耗费时间)之详细攻略
- Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略
- Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能
- Python语言学习之字符串那些事:python和字符串的使用方法之详细攻略
- Python语言学习之数值、小数、空格那些事:python和数值、小数、空格的使用方法之详细攻略
- 已解决cv2.error: OpenCV(4.2.0) C:projectsopencv-pythonopencvmodulesimgprocsrccolor.cpp:182: erro
- Python 实现个人博客系统(附零基础python学习资料)
- 〖Python自动化办公篇㉑〗- python实现邮件自动化 - 定时发送邮件
- python基础知识之 Python代码规范
- yolov4视频目标检测:使用C++版本联合CUDA11.2的OpenCV 5.x编译生成opencv-python==5.x进行推理
- OpenCV-Python Feature2D 特征点检测(含ORB/KAZE/FAST/BRISK/AKAZE)
- 【异常】前端ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- 〖Python自动化办公篇⑲〗 - python实现邮件自动化 - 邮件发送
- opencv-python 视频处理之时光倒流
- opencv-python视频处理之视频抖动特效
- OpenCV-Python学习(22)—— OpenCV 视频读取与保存处理(cv.VideoCapture、cv.VideoWriter)
- OpenCV-Python学习(2)—— OpenCV 图像的读取、显示和保存(cv.imread、cv.imshow、cv.imwrite)
- Python基于OpenCV的智能交通灯系统(南北车流量比例)[源码&部署教程]
- Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]