Aim:掌握图像的:加法、减法、位运算。cv2.add()、cv2.addWeighted()
图像加法
- cv2.add() ——解释:将两幅图像进行加法运算。使用numpy,res=img1+img2.
- 加法类型:opencv饱和操作,numpy模操作。opencv效果更好。
代码演示
# coding=utf-8
import cv2
import numpy as np
x=np.uint8([250])
y=np.uint8([10])
print(cv2.add(x,y)) # 250+10=260 =>255
print(x+y) # 250+10=260%256=4
图像混合
- 类似于加法,但两幅图像权重不同,给人混合或者透明的感觉。 计算公式:g(x)=(1-a)f0(x)+af1(x) ——通过修改a的值进行调节。
- dst=aimg1+bimg2+c
代码演示
# coding=utf-8
import cv2
import numpy as np
img1=cv2.imread('1.jpg')
img2=cv2.imread('2.jpg')
dst=cv2.addWeighted(img1,0.7,img2,0.3,0) #公式套用
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows
按位运算
- 按位操作:AND,OR,NOT,XOR。用于提取图像的一部分,选择非矩形ROI。
代码演示
# coding=utf-8
import cv2
import numpy as np
img1=cv2.imread('1.jpg') #加载图像
img2=cv2.imread('2.jpg')
rows,cols,channels=img2.shape
roi=img1[0:rows,0:cols]
img2gray=cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret,mask=cv2.threshold(img2gray,175,255,cv2.THRESH_BINARY)
mask_inv=cv2.bitwise_not(mask) #图像roi,找出目标位置
img1_bg=cv2.bitwise_and(roi,roi,mask=mask) #取roi中与mask中不为0的值对应的像素值,其他值为0.
img2_fg=cv2.bitwise_and(img2,img2,mask=mask_inv)
# roi中放logo,调整原图
dst=cv2.add(img1_bg,img2_fg)
img1[0:rows,0:cols]=dst
cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()