所有这些都做不同的事情。
np.uint8 只考虑您号码的最低字节。这就像在做value & 0xff。
>>> img = np.array([2000, -150, 11], dtype=np.int16)
>>> np.uint8(img)
array([208, 106, 11], dtype=uint8)
cv2.normalize 与 cv2.NORM_MINMAX 规范类型根据 normalisation function 规范化您的值
img_new = (img - img.min()) * ((max_new - min_new) / (img.max() - img.min())) + min_new
它有效地将一个范围更改为另一个范围,并且中间的所有值都会相应地缩放。根据定义,原始最小/最大值成为目标最小/最大值。
>>> cv2.normalize(img, out, 0, 255, cv2.NORM_MINMAX)
array([255, 0, 19], dtype=int16)
uint8 在 Matlab 中只是使您的值饱和。高于 255 的所有内容都变为 255,低于 0 的所有内容都变为 0。
>> uint8([2000 -150 11])
ans =
255 0 11
如果你想复制Matlab的功能,你可以这样做
>>> img[img > 255] = 255
>>> img[img < 0] = 0
您要使用哪一个取决于您要执行的操作。如果您的 int16 涵盖了像素值的范围,并且您想将它们重新缩放为 uint8,那么cv2.normalize 就是答案。