为什么元素加法/减法的输出会因numpy数组是int64类型还是uint8类型而不同?

2024-04-19 21:45:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在进行图像比较和计算差异,并注意到只有当我将数据作为numpy数组读入时,元素减法才有效,而dtype='int64'不是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正确计算。为什么?在


Tags: 图像imagenpdiffplt差异arrayfixed
1条回答
网友
1楼 · 发布于 2024-04-19 21:45:51

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

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

类似地,如果你减去两张图片,你很可能会得到负数-这些负数会再次回到范围的高端:

^{pr2}$

如果您需要像这样添加或减去图像,您需要使用一个不容易下溢/溢出的数据类型(例如int64或float),然后作为最后一步规范化并转换回uint8。在

相关问题 更多 >