(score,diff)= structural_similarity(original_gray,tempered_gray,full=True)
diff = (diff*255).astype("uint8")
print("SSIM:{}".format(score))
上面提到的代码是一个程序的片段,该程序使用 SSIM 分数来匹配两个图像。我这里不明白的是 .astype("uint8")
的函数,为什么我们要把 diff
乘以 255?
最佳答案
想象一个表示灰度(单 channel )图像的二维数组。一般来说,图像数据可以通过以下两种方式之一获取:
- 像素值是介于 0 到 1 之间的 float ,或者...
- 像素值是 0 到 255 之间的整数。
有时您可能还会看到以 0 到 100 之间的百分比表示的级别,但这与上面的 (1) 基本相同。请注意,(2) 只能表示 255 个灰度级,而 (1) 几乎具有任意精度。
有时你需要 (1) 但有 (2),反之亦然。因为软件或偏好或其他原因。
要从 (1) 转换为 (2),您必须乘以 255 并确保您有整数。为了使用最少的内存,您只需要 8 位整数,但它们有两种类型:有符号(int8
,范围 -128 到 +127)和无符号(uint8
,范围 0 到 255)。对于图像,您始终需要未签名的类型。
要将 (2) 转换为 (1),您只需除以 255,确保结果可以容纳所需精度的 float 。
因此,在您的代码中,diff
正在从浮点图像转换为 8 位图像。
关于python - .astype ("uint8") 这里有什么用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72115530/