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


(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位图像。

相关内容

最新更新