一:算术运算
1.加法
cv2.add(img1, img2)
img1:要做加法的图像一
img2:要做加法的图像二将两个图片进行加和,大于255的使用255计数
需要合成的两个图片大小必须一致
减法乘除类似故不做过多描述
示例:
import cv2
import numpy as np
dog = cv2.imread('./dog.jpeg')
#图的加法运算就是矩阵的加法运算
#因此,加法运算的两张图大小必须是相等的
#print(dog.shape)
img = np.ones((1200, 1920, 3), np.uint8) * 50#像素值变成50
cv2.imshow('orig', dog)
result = cv2.add(dog, img)#加法 感觉曝光一样
cv2.imshow('result', result)
orig_1 = cv2.subtract(result, img)#减法变暗 result-img
#乘multiply(A,B)
#除divide(A,B)
cv2.imshow('org_1', orig_1)
cv2.waitKey(0)
加法效果展示减法效果演示
二:图像融合
1.融合函数
AddWeighted( InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);
src1: 表示需要加权的第一个数组,常常填一个Mat
alpha: 表示第一个数组的权重
src2: 表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数
beta: 表示第二个数组的权重值
gamma: 一个加到权重总和上的标量值。其含义通过接下来列出的式子自然会理解
dst: OutputArray 类型的dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数
dtype: 输出阵列的可选深度,有默认值-1。当两个输入数组具有相同的深度时,这个参数设置为-1 (默认值),即等同于srcl .depth()当alpha、beta为1,gamma为0时,效果与add一样
只有两张图的属性是一样的才可以进行融合
输出图像可理解为
dst = src1 [I]*alpha+ src2[I]*beta + gamma;
2.示例
import cv2
import numpy as np
back = cv2.imread('./back.jpeg')
smallcat = cv2.imread('./smallcat1.jpeg')
#只有两张图的属性是一样的才可以进行融合
print(back.shape)
print(smallcat.shape)
result = cv2.addWeighted(smallcat, 0.7, back, 0.3, 0)
cv2.imshow('add2', result)
cv2.waitKey(0)
三:位运算
1.与运算
bitwise_and(src1, src2, dst=None, mask=None)
src1:参与与运算的图像
src2:用src2与src1进行与运算
dst:与输入具有相同大小和类型的输出数组
mask:可选操作掩码,8 位单通道数组,即指定要更改的输出数组的元素与运输操作就是1 & 1 = 1,其他为0,可以理解为并联电路控制小灯
或、非、异或同理故不做过多描述
2.示例
import cv2
import numpy as np
#创建一张图片
img = np.zeros((200,200), np.uint8)
img2 = np.zeros((200,200), np.uint8)
img[20:120, 20:120] = 255
img2[80:180, 80:180] = 255
#new_img = cv2.bitwise_not(img) #非 黑白颜色反转
#new_img = cv2.bitwise_and(img, img2) #与--图像交集 全1则1 类似于串联控制灯亮 只有白色相交的地方是白色
#new_img = cv2.bitwise_or(img, img2) #或--非0都显示
new_img = cv2.bitwise_xor(img, img2) #异或 --交集0
cv2.imshow('new_img', new_img)
cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.waitKey(0)
非:颜色反转(只能操作一个数组)与:类似于交集或:类似于并集异或:交集0,其他不变
四:添加水印
1.这里用到了之前学习的numpy操作
2,。示例
#1. 引入一幅图片,dog
#2. 要有一个LOGO,需要自己创建
#3. 计算图片在什么地方添加,在添加的地方变成黑色
#4. 利用add,将logo 与 图处叠加到一起
import cv2
import numpy as np
#导入图片
dog = cv2.imread('./dog.jpeg')
#创建LOGO和掩码
logo = np.zeros((200, 200, 3), np.uint8)
mask = np.zeros((200, 200), np.uint8)
#绘制LOGO
logo[20:120, 20:120] = [0,0,255]
logo[80:180, 80:180] = [0,255,0]
mask[20:120, 20:120] = 255
mask[80:180, 80:180] = 255
#对mask按位求反
m = cv2.bitwise_not(mask)
#选择dog添加logo的位置
roi = dog[0:200, 0:200]
#与m进行与操作
tmp = cv2.bitwise_and(roi, roi, mask = m)
dst = cv2.add(tmp, logo)
dog[0:200,0:200] = dst
cv2.imshow('dog', dog)
# cv2.imshow('dst', dst)
# cv2.imshow('tmp', tmp)
# cv2.imshow('m', m)
# cv2.imshow('mask', mask)
# cv2.imshow('logo', logo)
cv2.waitKey(0)
输出: