Python OpenCV/NumPy:为什么 np.uint8([255]) + np.uint8([255]) 给出结果 254 而不是 255?

Python OpenCV/NumPy: why np.uint8([255]) + np.uint8([255]) is giving result 254 instead of 255?

import numpy as np

a = np.uint8([255])
b = np.uint8([255])

print(a+b)

结果: array([254], dtype=uint8)

uint8可以保存范围0..255.

所以你写的例子 np.uint8([256]) -> array([0], dtype=uint8)

你的情况a+b=np.uint8([510])=np.uint8([510-256])=np.uint8([254])

uint8 是一个无符号整数,用 8 位表示。您可以使用 8 位表示的数字范围是 [0, 255].

255在8位二进制中是1111 1111.

将 1111 1111 与 1111 1111 相加,得到 1 1111 1110 (= 510)。但是由于你只有8位来表示(因为你用的是uint8),所以结果中最左边的1无法存储,渲染结果为1111 1110,也就是254.