前言
本节学习了图像运算的相关知识,且本节所做操作都必须在两张图片尺寸大小相同时才能进行。
一、图像运算
1.图像相加
图像相加本质上是矩阵的加法运算,因此两张图的尺寸必须相等。
add(A,B)
参数:A与B是两张图片
返回值:相加后的图片
代码案例:
import cv2
import numpy as np
cat = cv2.imread('./picture/cat.jpg')
print(cat.shape)
img = np.ones((450, 450, 3), np.uint8) * 100
cv2.imshow('cat', cat)
result = cv2.add(cat, img)
cv2.imshow('result', result)
cv2.waitKey(0)
结果展示:
图片相加后明显曝光度更高
2.图像减法
subtract(A,B)
含义:A-B
参数:A与B是两张图片
返回值:相减后的图片
代码案例:
import cv2
import numpy as np
cat = cv2.imread('./picture/cat.jpg')
img = np.ones((450, 450, 3), np.uint8) * 50
cv2.imshow('cat', cat)
result = cv2.subtract(cat, img)
cv2.imshow('result', result)
cv2.waitKey(0)
结果展示:
图像相减后明显色彩更加暗淡。
3.图像乘与除
multiply(A, B)
divide(A, B)
与图像加减类似。
4.图像融合
addWeighted()
声明:void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);
参数:
src1和src2:图像
alpha和beta:分别为A与B在融合后的权重
gamma:生成图像后整体加gamma
代码案例:
import cv2
import numpy as np
main = cv2.imread('./picture/main.webp')
back = cv2.imread('./picture/back.webp')
print(main.shape)
print(back.shape)
cv2.imshow('main', main)
cv2.imshow('back', back)
result = cv2.addWeighted(main, 0.7, back, 0.3, 0)
cv2.imshow('result', result)
cv2.waitKey(0)
结果展示:
二、图像位运算
1.非
bitwise_not(img)
代码案例:
import cv2
import numpy as np
img = np.zeros((200, 200), np.uint8)
img[50:150, 50:150] = 255
new_img = cv2.bitwise_not(img)
cv2.imshow('img', img)
cv2.imshow('new_img', new_img)
cv2.waitKey(0)
结果展示:
2.与
bitwise_and(img1, img2)
代码案例:
import cv2
import numpy as np
img1 = np.zeros((200, 200), np.uint8)
img2 = np.zeros((200, 200), np.uint8)
img1[20:120, 20:120] = 255
img2[80:180, 80:180] = 255
new_img = cv2.bitwise_and(img1, img2)
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('new_img', new_img)
cv2.waitKey(0)
结果展示:
3.或与异或
bitwise_or(img1, img2)
bitwise_xor(img1, img2)
代码案例:
import cv2
import numpy as np
img1 = np.zeros((200, 200), np.uint8)
img2 = np.zeros((200, 200), np.uint8)
img1[20:120, 20:120] = 255
img2[80:180, 80:180] = 255
new_or = cv2.bitwise_or(img1, img2)
new_xor = cv2.bitwise_xor(img1, img2)
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('new_or', new_or)
cv2.imshow('new_xor', new_xor)
cv2.waitKey(0)
结果展示: