我正在进行图像比较和计算差异,并注意到当我使用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计算。这是为什么?
答案 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作为最后一步。