gpt4 book ai didi

python - 图像类型 int16 到 uint8 的转换

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:48 58 4
gpt4 key购买 nike

我有一个数据类型为 int16 的图像。因此,当我必须将其范围转换为 0-255 时,我有两种方法可以在 Python 中完成。

1) 直接使用numpy.uint8函数

2) 使用范围为 0-255 的 OpenCV cv2.normalize 函数,然后使用 numpy.uint8

在 Matlab 中,我们直接使用 uint8 函数进行转换。在

同样在第二种情况下,我使用了 NORM_MINMAX 并且强度值的范围更改为 0-4

进行转换的正确方法是什么?

最佳答案

所有这些都做不同的事情。

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)

Matlab 中的

uint8 只会使您的值饱和。所有高于 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 就是答案。

关于python - 图像类型 int16 到 uint8 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46866586/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com