【问题标题】:Python OpenCV/NumPy: why np.uint8([255]) + np.uint8([255]) is giving result 254 instead of 255?Python OpenCV/NumPy:为什么 np.uint8([255]) + np.uint8([255]) 给出的结果是 254 而不是 255?
【发布时间】:2021-08-03 02:36:16
【问题描述】:
import numpy as np

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

print(a+b)

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

【问题讨论】:

  • 你有什么问题?
  • 我想知道为什么它给 254 而不是 255 @user_na
  • 因为 uint8 在 256 处换行;你得到 (255+255)-256。
  • 研究一下整数溢出。在unit8255+1 = 0

标签: python numpy opencv numpy-ndarray opencv-python


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!这有帮助。
【解决方案2】:

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

8 位二进制中的 255 是 1111 1111。

当您将 1111 1111 添加到 1111 1111 时,您会得到 1 1111 1110 (= 510)。但是由于你只有 8 位来表示(因为你使用的是uint8),所以结果中最左边的 1 无法存储,将结果呈现为 1111 1110,即 254。

【讨论】:

  • 谢谢!这有帮助。
猜你喜欢
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2019-02-27
  • 2014-11-29
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
相关资源
最近更新 更多