RuntimeWarning: overflow encountered in scalar add

先翻译一下

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

出现原因

        通过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

你可能感兴趣的:(python,深度学习)