从两张图像求平均说起-python中的uint8

从两张图像求平均说起-python中的uint8

前段时间需要对三张图像求平均,这本来是个跟简单的问题,但是做着做着确出现了一个问题…

0. 求平均v1

import numpy as np
import cv2
data1 = cv2.imread("a.png")
data2 = cv2.imread("a.png")
cv2.imwrite("b.png",(data1+data2)/2)

其中a.png是一张全白的照片,里面全部都是255,按照我的想法,那平均一下应该还是全白,因为(255+255)/2 还是255,但是出来的结果确让我大跌眼睛,竟然变成了灰色的了,这就emm…

并且对平均后的数据输出发现全部都是127,那这是哪里出了问题呢。

后来我在网上看到别人求平均,代码如下:

import numpy as np
import cv2
data1 = cv2.imread("a.png").astype(np.float)
data2 = cv2.imread("a.png").astype(np.float)
print((data1+data2)/2)
cv2.imwrite("b.png",(data1+data2)/2)

看到这里我就有点明白了,忽然想起来了,很久之前的时候,听说过opencv读取的数据类型是uint8,到这里就大概明白了,之前的代码之所以有问题,是因为数据溢出了,uint8类型最大只能存储到256个数值[0,255],超过的部分就被截取了,因此我原先的data1+data2计算得到是510>255,所以就截断了,因此变为510%256 = 254,然后再除2就变成127了。

1. 求平均v2

因此改进后的代码如下:

import numpy as np
import cv2
data1 = cv2.imread("a.png").astype(np.float)
data2 = cv2.imread("a.png").astype(np.float)
print((data1+data2)/2)
cv2.imwrite("b.png",(data1+data2)/2)
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值