OpenCV之图像的运算

图片相加
cv2.add(img1, img2) 注:图像相加就是矩阵的相加,所以两张图大小必须要一样,相加后的图片会更亮
图片相减
cv2.subtract(a, b), 得到的结果是a-b,相减后图片会更暗
图片相乘
cv2.mutiply(a,b),效果和相加差不多
图片相除
cv2.divide(a,b),效果和相减差不多
图像溶合
cv2.addWeighted(img1, alpha, img2, bate, gamma)
alpha: 代表img1占的权重
bate: 代表img2 占的权重
gamma: 静态权重,就是给整张融合后的图片加像素点或者减像素点
图像的非操作
bitwise_not(img):假如一张图片是黑色,经过非操作后就会变成白色
图像的与操作
cv2.bitwise_and(img1,img2):当两张图片某块区域颜色一样时得出照片的这块区域不变色,不一样时得出的是黑色,即颜色不一样时像素点变为0.
图像的或运算
cv2.bitwise_or(img1, img2):两者都为0才为0
图像的异或运算
cv2.bitwise_xor(img1, img2):相同的地方为0,不同的地方为1
以下代码是利用上面基础知识来为一幅图添加简单的水印

#1.引入一副图片
#2.要有一个logo,自己创建
#3.计算图片在什么地方添加,在添加的地方变成黑色
#4.利用add,在logo与图片叠加在一起

import cv2
import numpy as np
#导入图片
dog = cv2.imread('d:\\STUDY_OPENCV\\img\\dog.jfif')
#创建LOGO和mask
logo = np.zeros((200, 200, 3), np.uint8)
mask = np.zeros((200, 200),np.uint8)

#绘制logo
logo[20:120, 20:120] = [0, 0 , 105]
logo[80:180, 80:180] = [0,105,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) #roi是三通道的,所以要以这种形式
#进行叠加
dst = cv2.add(tmp, logo)
dog[0:200, 0:200] = dst

cv2.imshow('logo', logo)
cv2.imshow('dog',dog)
cv2.imshow('dst', dst)
cv2.waitKey(0)

结果如下把水印加在了左上角

OpenCV之图像的运算_第1张图片

你可能感兴趣的:(opencv,计算机视觉,人工智能)