1.相加
代码实战
import os
import cv2
import numpy as np
#读取图片和缩放图片
lenna=cv2.imread('images/lenna.png')
lenna=cv2.resize(src=lenna,dsize=(450,450))
#创建相同尺寸的图片
npimg=np.ones(shape=(lenna.shape[0],lenna.shape[1],lenna.shape[2]),dtype=np.uint8)*100
#两张图片进行与运算
dst=cv2.add(src1=lenna,src2=npimg)
#显示图片
cv2.imshow('lenna',lenna)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
print('Pycharm')
可以看到最终得到的图类似曝光。
2.减法
def Subtract():
# 读取图片和缩放图片
lenna = cv2.imread('images/lenna.png')
lenna = cv2.resize(src=lenna, dsize=(450, 450))
# 创建相同尺寸的图片
npimg = np.ones(shape=(lenna.shape[0], lenna.shape[1], lenna.shape[2]), dtype=np.uint8) * 100
# 首先两张图片进行加法运算
dst = cv2.add(src1=lenna, src2=npimg)
#将进行加法之后的图像再进行减法操作,还原回原图
original=cv2.subtract(src1=dst,src2=npimg)
print("原图中最大像素值: {}".format(lenna.max()))
print('相加之后的最大像素值: {}'.format(dst.max()))
print('相减之后的最大像素值: {}'.format(original.max()))
# 显示图片
cv2.imshow('lenna', lenna)
cv2.imshow('dst', dst)
cv2.imshow('original',original)
cv2.waitKey(0)
cv2.destroyAllWindows()
print("原图中最大像素值: {}".format(lenna.max()))
print('相加之后的最大像素值: {}'.format(dst.max()))
print('相减之后的最大像素值: {}'.format(original.max()))
可以看到原图中的最大像素值为255,而相加之后的最大像素值肯定也为255;但是假设原图中有一个像素值为160的,首先加上100之后,那么像素值变为255(因为超过了255,所以只能为255),那么在相减的时候,这个像素值变为了155,和原来的160相比减小了,所以就算原来的图先加后减,图像一般也会变的稍微暗一点。
3.乘法
def mutilpImg():
# 读取图片和缩放图片
lenna = cv2.imread('images/lenna.png')
lenna = cv2.resize(src=lenna, dsize=(450, 450))
# 创建相同尺寸的图片
npimg = np.ones(shape=(lenna.shape[0], lenna.shape[1], lenna.shape[2]), dtype=np.uint8) * 100
#进行乘积
dst=cv2.multiply(src1=lenna,src2=npimg)
# 显示图片
cv2.imshow('lenna', lenna)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
为什么输出的为大部分为白色了,是因为相乘之后很多像素值都大于了255,所以最后的结果就是255,也就是导致图像很多地方都是白色的。
4.除法
def DividImg():
# 读取图片和缩放图片
lenna = cv2.imread('images/lenna.png')
lenna = cv2.resize(src=lenna, dsize=(450, 450))
# 创建相同尺寸的图片
npimg = np.ones(shape=(lenna.shape[0], lenna.shape[1], lenna.shape[2]), dtype=np.uint8) * 100
# 进行乘积
dst = cv2.divide(src1=lenna, src2=npimg)
# 显示图片
cv2.imshow('lenna', lenna)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(“原图中最大像素值: {}”.format(lenna.max()))
print(“除法之后最大像素值: {}”.format(dst.max()))
可以看到原图中的最大像素值为255,而原图中所有的像素值都除了100之后,那么最后的结果只能是<=3,所以看起来是黑色的。