为什么我在 python 中得到 "RuntimeWarning: overflow encountered in ubyte_scalars error"?
Why I am getting "RuntimeWarning: overflow encountered in ubyte_scalars error" in python?
我知道如果我使用
我的程序将运行
int(red)+int(blue)+int(green)
但我想知道为什么?
在我的代码中,我将 red
、blue
和 green
添加到 avg
(我声明为 avg=1000
),这很容易保存三个 8 位整数的总和。
我不明白为什么会抛出溢出错误。
这是我的代码:
import cv2 as cv
import numpy as np
avg=1000
img=cv.imread('C:/Users/#####/Documents/roi.jpg')
print(img.shape)
print(img.dtype)
for i in range(0,279):
for j in range(0,449):
blue=img[i,j,0]
green=img[i,j,1]
red=img[i,j,2]
avg=(red+green+blue)/3
img[i,j,0]=avg
img[i,j,1]=avg
img[i,j,2]=avg
while(1):
cv.imshow("Image",img)
if cv.waitKey(0):
break
cv.destroyAllWindows()
尝试打印 red
、green
和 blue
的 type
,您将得到:
<class 'numpy.uint8'>
每个最大值为 255(参见 Numpy Data Types)。
尝试打印 red
、green
和 blue
的值,这三者的总和很容易超过 255(例如 251 + 251 + 251)。是的,avg
变量将被类型化为 Python 的原生 int
可以保存总和,但是三个 numpy.uint8
类型的加法运算会引发警告, before 赋值给 avg
。您可以通过
来检查
red + green + blue
没有将它分配给任何东西,它会引发同样的警告。
Numpy 的数据类型文档还提供了一些关于 Overflow Errors 的信息:
The fixed size of NumPy numeric types may cause overflow errors when a value requires more memory than available in the data type.
我知道如果我使用
我的程序将运行int(red)+int(blue)+int(green)
但我想知道为什么?
在我的代码中,我将 red
、blue
和 green
添加到 avg
(我声明为 avg=1000
),这很容易保存三个 8 位整数的总和。
我不明白为什么会抛出溢出错误。
这是我的代码:
import cv2 as cv
import numpy as np
avg=1000
img=cv.imread('C:/Users/#####/Documents/roi.jpg')
print(img.shape)
print(img.dtype)
for i in range(0,279):
for j in range(0,449):
blue=img[i,j,0]
green=img[i,j,1]
red=img[i,j,2]
avg=(red+green+blue)/3
img[i,j,0]=avg
img[i,j,1]=avg
img[i,j,2]=avg
while(1):
cv.imshow("Image",img)
if cv.waitKey(0):
break
cv.destroyAllWindows()
尝试打印 red
、green
和 blue
的 type
,您将得到:
<class 'numpy.uint8'>
每个最大值为 255(参见 Numpy Data Types)。
尝试打印 red
、green
和 blue
的值,这三者的总和很容易超过 255(例如 251 + 251 + 251)。是的,avg
变量将被类型化为 Python 的原生 int
可以保存总和,但是三个 numpy.uint8
类型的加法运算会引发警告, before 赋值给 avg
。您可以通过
red + green + blue
没有将它分配给任何东西,它会引发同样的警告。
Numpy 的数据类型文档还提供了一些关于 Overflow Errors 的信息:
The fixed size of NumPy numeric types may cause overflow errors when a value requires more memory than available in the data type.