为什么元素加法/减法的输出根据我的numpy数组是int64还是uint8而不同?

时间:2017-07-16 00:00:44

标签: python numpy

我正在进行图像比较和计算差异,并注意到当我使用dtype =' int64&#39读取数据时,元素减法似乎才有效。 ;而不是dtype =' uint8'。我想切换到' unit8'出于图像可视化原因。

image1 = np.array(plt.imread('fixed_image.jpg'), dtype='int64')[:, :, 0:3]
image2 = np.array(plt.imread('fixed_image_2.jpg'), dtype='int64')[:, :, 0:3]
diff = image1-image2

在上面的代码中,diff仅使用dtype int64正确计算,而不是使用dtype uint8计算。这是为什么?

1 个答案:

答案 0 :(得分:2)

uint8表示“8位无符号整数”,仅在0-255 中有效值。这是因为256个不同的值是可以使用8位数据表示的最大量。如果将两个uint8图像一起添加,则很可能会在某处溢出255。例如:

>>> np.uint8(130) + np.uint8(131)
5

同样,如果你减去两张图像,你很可能会得到负数 - 它会再次被卷入该范围的高端:

>>> np.uint8(130) - np.uint8(131)
255

如果您需要添加或减去这样的图像,您将需要使用不会轻易下溢/溢出的dtype(例如int64或float),然后标准化并转换回uint8作为最后一步。