python - .astype ("uint8") 这里有什么用途?

标签 python numpy image-processing computer-vision ssim

(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 )图像的二维数组。一般来说,图像数据可以通过以下两种方式之一获取:

  1. 像素值是介于 0 到 1 之间的 float ,或者...
  2. 像素值是 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/

相关文章:

c# - 计算 FFT 相关系数

python - 了解 scipy.interpolate 的 interpn 函数

python - 在 Python 3 中导入 numba 时出错

image-processing - 智能手机上的人体姿势估计/匹配

image-processing - 使用 TensorFlow CNN 进行图像分类

python - Anacondas 安装搞砸了 IPython pandas 导入?

javascript - Flask 文件未在 Javascript 提取时更新

python - 如何添加另一个数据框的索引

python - OpenCV & Python - 实时图像(帧)处理

python - Psycopg2 生产适当的 mogrify?