先翻译一下
运行时警告:标量加法中遇到溢出
出现原因
通过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 版权协议,转载请附上原文出处链接和本声明。