预备知识
opencv中提供了四种归一化的方法:
- NORM_MINMAX
- NORM_INF
- NORM_L1
- NORM_L2
最常用的就是NORM_MINMAX归一化方法
L1 归一化(依据是:和为1)
2.0+8.0+10.0=20
2.0 0.1 (2.0/20.0)
8.0 0.4 (8.0/20.0)
10.0 0.5 (10.0/20.0)
L2 归一化(依据是:单位向量为1,也即每个数除以 根号下所有数的平方和)
2.0 0.15
8.0 0.62
10.0 0.77
NORM_INF 归一化(依据是:最大值)
2.0 0.2 (2.0/10.0)
8.0 0.8 (8.0/10.0)
10.0 1.0 (10.0/10.0)
NORM_MINMAX 归一化(依据是:delta=max-min,也即最小值为0,最大值为1)
2.0 0.0 (0.0/8.0)
8.0 0.75 (6.0/8.0)
10.0 1.0 (8.0/8.0)
代码
import cv2 as cv
import numpy as np
src = cv.imread('./erweima.png', cv.IMREAD_COLOR)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
gray = np.float32(gray)
print(gray)
dst = np.zeros(gray.shape, dtype=np.float32)
cv.normalize(gray, dst=dst, alpha=0, beta=1.0, norm_type=cv.NORM_MINMAX)
dst = np.zeros(gray.shape, dtype=np.float32)
cv.normalize(gray, dst=dst, alpha=1.0, beta=0, norm_type=cv.NORM_MINMAX)
print(dst)
cv.imshow("NORM_MINMAX", np.uint8(dst * 255))
dst = np.zeros(gray.shape, dtype=np.float32)
cv.normalize(gray, dst=dst, alpha=1.0, beta=0, norm_type=cv.NORM_INF)
print(dst)
cv.imshow("NORM_INF", np.uint8(dst * 255))
cv.waitKeyEx(0)
cv.destroyAllWindows()
实验结果
解释
函数cv.normalize(gray, dst=dst, alpha=0, beta=1.0, norm_type=cv.NORM_MINMAX)
中alpha和beta的意义是:
alpha
:range normalization模式的最小值
beta
:range normalization模式的最大值,不用于norm normalization(范数归一化)模式。
NORM_MINMAX:
数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。
NORM_INF
:归一化数组的C-范数(绝对值的最大值)
NORM_L1
: 归一化数组的L1-范数(绝对值的和)
NORM_L2
: 归一化数组的(欧几里德)L2-范数