.astype("uint8") 在这里有什么目的?

What purpose does .astype("uint8") have here?

(score,diff)= structural_similarity(original_gray,tempered_gray,full=True)

diff = (diff*255).astype("uint8")
print("SSIM:{}".format(score))

上面提到的代码是一个程序的片段,该程序使用它们的 SSIM 分数匹配两个图像。我在这里不明白的是.astype("uint8")的功能,为什么我们要将diff乘以255?

想象一个表示灰度(单通道)图像的二维数组。通常,图像数据可以通过以下两种方式之一提供给您:

  1. 像素值是介于 0 到 1 之间的浮点数,或者...
  2. 像素值是 0 到 255 之间的整数。

有时您可能还会看到用 0 到 100 之间的百分比表示的级别,但这与上面的 (1) 基本相同。请注意,(2) 只能表示 255 个灰度级,而 (1) 几乎具有任意精度。

有时您需要 (1) 而没有 (2),反之亦然。因为软件或者偏好什么的。

要从 (1) 转换为 (2),您必须乘以 255 并确保您有整数。为了使用最少的内存,您只需要 8 位整数,但它们有两种类型:有符号(int8,范围 -128 到 +127)和无符号(uint8,范围0 到 255)。对于图像,您总是想要未签名的那种。

要从 (2) 转换为 (1),您只需除以 255,确保结果可以包含所需精度的浮点数。

因此在您的代码中,diff 正在从浮点图像转换为 8 位图像。