![OpenCV轻松入门:面向Python(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/266/47382266/b_47382266.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.1.1 加号运算符
使用加号运算符“+”对图像a(像素值为a)和图像b(像素值为b)进行求和运算时,遵循以下规则:
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt003_1.jpg?sign=1739625253-kfZbaWzveYzQyHsziErURk1YaSe3z13N-0-053d7ed445a5e2735e2638d887598c73)
式中,mod()是取模运算,“mod(a+b,256)”表示计算“(a+b)的和除以256取余数”。
根据上述规则,两个像素值进行加法运算时:
● 如果两个图像对应像素值的和小于或等于255,则直接相加得到运算结果。例如,像素值28和像素值36相加,得到计算结果64。
● 如果两个图像对应像素值的和大于255,则将运算结果对256取模。例如255+58=313,大于255,则计算(255+58)%256=57,得到计算结果57。式中,%表示取余运算。
当然,上述公式也可以简化为(a+b)=mod(a+b,256),在运算时无论相加的和是否大于255,都对数值256取模。
【例3.1】使用随机数数组模拟灰度图像,观察使用“+”对像素值求和的结果。
分析:数据类型np.uint8所表示的数据范围是[0,255]。通过将数组的数值类型定义为dtype=np.uint8,可以保证数组值的范围在[0,255]之间。
根据题目要求及分析,编写程序如下:
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt003_2.jpg?sign=1739625253-oQJxJ42aoCpfYV3kLr6ULdLXIX8RppZT-0-e52ca888d5747365f1188db4723a2956)
运行程序,得到如下计算结果:
![](https://epubservercos.yuewen.com/D41D8C/26766203101053706/epubprivate/OEBPS/Images/txt003_3.jpg?sign=1739625253-idCBplzo8Ft9QgwXmtZnavonMoQxFoQn-0-a2135974e8c16093140cd202d54f6a61)
从上述程序可以看到,当使用“+”计算两个256级灰度图像内像素值的和时,运算结果会对256取模。
需要注意,本例题中的加法要进行取模,这是由数组的类型dtype=np.uint8所规定的。np.uint8的数值范围是[0,255]。