RuntimeWarning: overflow encountered in scalar add

  • Post author:
  • Post category:其他


先翻译一下

运行时警告:标量加法中遇到溢出

出现原因

通过PIL读取(或者Cv2读取)一张图片,并让图片自我相加之后,出现的标量溢出的情况,两张不同但维度相同的图片相加也会出现标量溢出

代码测试

import numpy
import numpy as np
from PIL import Image

# 测试1
img1 = np.array([[[255,255,255],[255,255,255],[255,255,255]],[[255,255,255],[255,255,255],[255,255,255]],[[255,255,255],[255,255,255],[255,255,255]]])

img = []
img.append(img1)
img.append(img1)

sumImg1 = img[0][0][0][0] + img[1][0][0][0]
print(sumImg1)

# 测试2
img2 = Image.open("1.png")
img2 = np.array(img2)

img = []
img.append(img2)
img.append(img2)

sumImg2 = img[0][0][0][0] + img[1][0][0][0]
print(sumImg2)

分为测试1和测试2

测试1:

img1为模拟的3*3*3的白色图片转化为Numpy后的数据

将两张img1放入img 中

sumImg1 相当于左上角第一个像素相加两次

测试2:

读取一张真实的图片,其中左上角第一个像素为纯白色

将两张img2放入img 中

sumImg1 相当于左上角第一个像素相加两次

测试结果如下:出现了标量溢出错误

510
254
test.py:23: RuntimeWarning: overflow encountered in scalar add
  sumImg2 = img[0][0][0][0] + img[1][0][0][0]

原因推测

可能是通过Image转换为Numpy的数组并不是纯numpy,而是以一种标量的方式存在的,而且其存在上限值为255!超过这个值会溢出

解决方案

总之,在相加之前,先除以总数就行

# 源代码
sumImg2 = img[0][0][0][0] + img[1][0][0][0]

# 改为
sumImg2 = img[0][0][0][0] / 2 + img[1][0][0][0] / 2



版权声明:本文为weixin_52009798原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。