归一化就是把范围都压缩到0-1之间,可尽量避免处理过程中的精度丢失。
先上结论:
H色调: 0 — 180
S饱和度: 0 — 255
V亮度: 0 — 255
RGB三通道都是0-255
进行一个并不严谨的验证,
import cv2
import numpy as np
img = cv2.imread('jieguo.jpg')
HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
H, S, V = cv2.split(HSV)
x, y = np.shape(H)
a = 0
b = 0
for i in range(0, x):
for j in range(0, y):
if H[i, j] > 181:
a = a +1
print(a)
结果为0
import cv2
import numpy as np
img = cv2.imread('jieguo.jpg')
HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
H, S, V = cv2.split(HSV)
x, y = np.shape(H)
a = 0
b = 0
for i in range(0, x):
for j in range(0, y):
if H[i, j] > 170:
a = a +1
print(a)
结果为4308
说明H在170-180之间是存在的,而大于180就没有了。
同理可看出S和V的255也没啥问题。
RGB归一化:
import cv2
img = cv2.imread('jieguo.jpg')
x = img/255
HSV归一化:
import cv2
img = cv2.imread(‘jieguo.jpg’)
HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
s = HSV/255
搞了半天也没能单独改变一个通道的值,反正除以255也算是在0-1内了,如果有大佬可以指点一下就好了。
ps:遇到的问题是,
HSV[:, :, 0] = (HSV[:, :, 0]/180)
print(HSV[:, :, 0])结果全是0.
而
x = (HSV[:, :, 0]/180)
print(x)
结果就是正确的。但是没办法把它放回到图像通道里了。
加一句HSV[:, :, 0]=X还是不行,会全变成0,估计是数据类型的原因。