我正在进行图像比较和计算差异,并注意到只有当我将数据作为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正确计算。为什么?在
uint8
表示“8位无符号整数”,且只有0-255中的有效值。这是因为256个不同的值是可以用8位数据表示的最大值。如果您将两个uint8图像加在一起,很可能会在某个地方溢出255。例如:类似地,如果你减去两张图片,你很可能会得到负数-这些负数会再次回到范围的高端:
^{pr2}$如果您需要像这样添加或减去图像,您需要使用一个不容易下溢/溢出的数据类型(例如int64或float),然后作为最后一步规范化并转换回uint8。在
相关问题 更多 >
编程相关推荐